LoveRead.info » Книги » Разная литература » Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен

Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен

Книгу Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен читаем онлайн бесплатно полную версию! Чтобы начать читать не надо регистрации. Напомним, что читать онлайн вы можете не только на компьютере, но и на андроид (Android), iPhone и iPad. Приятного чтения!

178 0 18:04, 26-08-2023
Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен
26 август 2023

Книга Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен читать онлайн бесплатно без регистрации

В 10-м издании книги описаны новейшие возможности языка C# 9 и .NET 5 вместе с подробным "закулисным" обсуждением, призванным расширить навыки критического мышления разработчиков, когда речь идет об их ремесле. Книга охватывает ASP.NET Core, Entity Framework Core и многое другое наряду с последними обновлениями унифицированной платформы .NET, начиная с улучшений показателей производительности настольных приложений Windows в .NET 5 и обновления инструментария XAML и заканчивая расширенным рассмотрением файлов данных и способов обработки данных. Все примеры кода были переписаны с учетом возможностей последнего выпуска C# 9.

    1 ... 268 269 270 271 272 273 274 275 276 ... 407
    Перейти на страницу:
    NULL,

      [PetName] [nvarchar](max) NULL,

      [TimeStamp] [varbinary](max) NULL,

      [MakeId] [int] NOT NULL,

     CONSTRAINT [PK_Cars] PRIMARY KEY CLUSTERED

    (

      [Id] ASC

    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,

     IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON,

     OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]

    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

    GO

    ALTER TABLE [dbo].[Cars]

    WITH CHECK ADD  CONSTRAINT [FK_Cars_Makes_MakeId] FOREIGN

    KEY([MakeId])

    REFERENCES [dbo].[Makes] ([Id])

    ON DELETE CASCADE

    GO

    ALTER TABLE [dbo].[Cars] CHECK CONSTRAINT [FK_Cars_Makes_MakeId]

    GO

    Обратите внимание на ограничения внешнего ключа и проверки, созданные для зависимой таблицы (Cars).

    Отношения "один к одному"

    В отношениях "один к одному" обе сущности имеют навигационные свойства типа ссылок друг на друга. Хотя отношения "один к одному" четко обозначают главную и зависимую сущности, при построении таких отношений EF Core необходимо сообщить о том, какая сторона является главной, либо явно определяя внешний ключ, либо указывая главную сущность с использованием Fluent API. Если не проинформировать исполняющую среду EF Core, тогда она будет делать выбор на основе своей способности обнаруживать внешний ключ. На практике вы должны четко определять зависимую сущность, добавляя свойства внешнего ключа:

    namespace AutoLot.Samples.Models

    {

      public class Car : BaseEntity

      {

      public string Color { get; set; }

        public string PetName { get; set; }

        public int MakeId { get; set; }

        public Make MakeNavigation { get; set; }

        public Radio RadioNavigation { get; set; }

      }

    }

    namespace AutoLot.Samples.Models

    {

      public class Radio : BaseEntity

      {

        public bool HasTweeters { get; set; }

        public bool HasSubWoofers { get; set; }

        public string RadioId { get; set; }

        public int CarId { get; set; }

        public Car CarNavigation { get; set; }

      }

    }

    Поскольку класс Radio имеет внешний ключ к классу Car (на основе соглашения, которое будет раскрыто вскоре), Radio является зависимой, а Car — главной сущностью. Исполняющая среда EF Core неявно создает обязательный уникальный индекс на свойстве внешнего ключа в зависимой сущности. Если вы хотите изменить имя индекса, тогда можете воспользоваться аннотациями данных или Fluent API.

    Добавьте в класс ApplicationDbContext экземпляр DbSet<Radio>:

    public virtual DbSet<Car> Cars { get; set; }

    public virtual DbSet<Make> Makes { get; set; }

    public virtual DbSet<Radio> Radios { get; set; }

    Создайте миграцию и обновите базу данных с помощью таких команд:

    dotnet ef migrations add One2One -o Migrations

     -c AutoLot.Samples.ApplicationDbContext

    dotnet ef database update One2One  -c AutoLot.Samples.ApplicationDbContext

    В результате обновления базы данных с применением миграции EF Core таблица Cars не изменяется, но создается таблица Radios:

    CREATE TABLE [dbo].[Radios](

      [Id] [int] IDENTITY(1,1) NOT NULL,

      [HasTweeters] [bit] NOT NULL,

      [HasSubWoofers] [bit] NOT NULL,

      [RadioId] [nvarchar](max) NULL,

      [TimeStamp] [varbinary](max) NULL,

      [CarId] [int] NOT NULL,

     CONSTRAINT [PK_Radios] PRIMARY KEY CLUSTERED

    (

        [Id] ASC

    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,

     IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON,

     OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]

    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

    GO

    ALTER TABLE [dbo].[Radios]

    WITH CHECK ADD  CONSTRAINT [FK_Radios_Cars_CarId] FOREIGN

    KEY([CarId])

    REFERENCES [dbo].[Cars] ([Id])

    ON DELETE CASCADE

    GO

    ALTER TABLE [dbo].[Radios] CHECK CONSTRAINT [FK_Radios_Cars_CarId]

    GO

    Обратите внимание на ограничения внешнего ключа и проверки, созданные для зависимой таблицы (Radios).

    Отношения "многие ко многим" (нововведение в версии EF Core 5)

    В отношении "многие ко многим" каждая сущность содержит навигационное свойство типа коллекции для другой сущности, что в хранилище данных реализуется с использованием таблицы соединения посреди двух сущностных таблиц. Такая таблица соединения именуется в соответствии с двумя таблицами в виде <Сущность1Сущность2>. Имя можно изменить в коде через Fluent API. Таблица соединения имеет отношения "один ко многим" с каждой сущностной таблицей:

    namespace AutoLot.Samples.Models

    {

      public class Car : BaseEntity

      {

        public string Color { get; set; }

        public string PetName { get; set; }

        public int MakeId { get; set; }

        public Make MakeNavigation { get; set; }

        public Radio RadioNavigation { get; set; }

        public IEnumerable<Driver> Drivers { get; set; } = new List<Driver>();

      }

    }

    namespace AutoLot.Samples.Models

    {

      public class Driver : BaseEntity

      {

        public string FirstName { get; set; }

        public string LastName { get; set; }

        public IEnumerable<Car> Cars { get; set; } = new List<Car>();

      }

    }

    Эквивалентное решение можно обеспечить путем явного создания трех таблиц и именно так приходилось поступать в версиях EF Core, предшествующих EF Core 5. Вот как выглядит сокращенный пример:

    public class Driver

    {

      ...

      public IEnumerable<CarDriver> CarDrivers { get; set; }

    }

    public class Car

    {

      ...

      public IEnumerable<CarDriver> CarDrivers { get; set; }

    }

    public class CarDriver

    {

      public int CarId {get;set;}

      public Car CarNavigation {get;set;}

      public int DriverId {get;set;}

      public Driver DriverNavigation {get;set;}

    }

    Добавьте в класс ApplicationDbContext экземпляр DbSet<Driver>:

    public virtual DbSet<Car> Cars { get; set; }

    public virtual DbSet<Make> Makes { get; set; }

    public virtual DbSet<Radio> Radios { get; set; }

    public virtual DbSet<Driver> Drivers { get; set; }

    Создайте миграцию и обновите базу данных с помощью следующих команд:

    dotnet ef migrations add Many2Many -o Migrations

     -c AutoLot.Samples.ApplicationDbContext

    dotnet ef database update many2Many  -c AutoLot.Samples.ApplicationDbContext

    1 ... 268 269 270 271 272 273 274 275 276 ... 407
    Перейти на страницу:
    1. Жалоба
    Отзывы - 0

    Прочитали книгу? Предлагаем вам поделится своим отзывом от прочитанного(прослушанного)! Ваш отзыв будет полезен читателям, которые еще только собираются познакомиться с произведением.


    Уважаемые читатели, слушатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

    • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
    • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
    • 3. Просьба отказаться от нецензурной лексики.
    • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

    Надеемся на Ваше понимание и благоразумие. С уважением, администратор LoveRead.info.


    Установить VPN и читай слушай бесплатно

    Новые отзывы

    1. Людмила Хофман Людмила Хофман10 июнь 22:13 У меня перевернулся мир после прочтения ваших книг! Так приятно и чисто на душе, ведь по сути неважно кто с кем , а только любовь... Долгая игра - Рейчел Рид
    2. Анна Анна08 июнь 11:28 Спасибо за новую историю жизни и любви на сайте,прочитала с удовольствием .... Давай поженимся - Юлия Резник
    3. Елена Елена08 июнь 11:13 Прочла несколько романов этого, без сомнения, талантливого автора. Впечатление прекрасное, но хотелось бы когда-нибудь прочесть... Предатель. Ты врал мне годами - Арина Арская
    Все комметарии
    Новинки бесплатной онлайн библиотеки