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

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

На нашем литературном портале можно бесплатно читать книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю, Троелсен Эндрю . Жанр: Базы данных. Онлайн библиотека дает возможность прочитать весь текст и даже без регистрации и СМС подтверждения на нашем литературном портале litmir.org.
Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
Название: Язык программирования C#9 и платформа .NET5
Дата добавления: 22 август 2024
Количество просмотров: 233
Читать онлайн

Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних просмотр данного контента СТРОГО ЗАПРЕЩЕН! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту readbookfedya@gmail.com для удаления материала

Язык программирования C#9 и платформа .NET5 читать книгу онлайн

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

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

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

Все примеры кода были переписаны с учетом возможностей последнего выпуска C# 9.

Перейти на страницу:

ApplicationDbContext

dotnet ef database update ReplaceTimeStamp

 -c AutoLot.Samples.ApplicationDbContext

Теперь база данных соответствует вашей модели.

Аннотации и навигационные свойства

Аннотация ForeignKey позволяет EF Core знать, какое свойство является поддерживающим полем для навигационного свойства. По соглашению <ИмяТипа>Id автоматически станет свойством внешнего ключа, но в предыдущем примере оно было установлено явно. Такой подход обеспечивает отличающиеся стили именования, а также наличие в таблице более одного внешнего ключа. Кроме того, улучшается читабельность кода.

Свойство InverseProperty информирует EF Core о способе связывания таблиц, указывая навигационное свойство в других сущностях, которое направляет обратно в текущую сущность. Свойство InverseProperty требуется, когда сущность связана с другой сущностью несколько раз, и вдобавок делает код более читабельным.

Интерфейс Fluent API

С помощью интерфейса Fluent API сущности приложения конфигурируются посредством кода С#. Методы предоставляются экземпляром ModelBuilder, доступным в методе OnModelCreating() класса DbContext. Интерфейс Fluent API является самым мощным способом конфигурирования и переопределяет любые конфликтующие между собой соглашения или аннотации данных. Некоторые конфигурационные параметры доступны только через Fluent API, скажем, стандартные значения для настроек и каскадное поведение для навигационных свойств.

Отображение классов и свойств

В следующем коде воспроизведен предыдущий пример Car с использованием Fluent API вместо аннотаций данных (здесь не показаны навигационные свойства, которые будут раскрыты ниже):

modelBuilder.Entity<Car>(entity =>

{

  entity.ToTable("Inventory","dbo");

  entity.HasKey(e=>e.Id);

  entity.HasIndex(e => e.MakeId, "IX_Inventory_MakeId");

  entity.Property(e => e.Color)

    .IsRequired()

    .HasMaxLength(50);

  entity.Property(e => e.PetName)

    .IsRequired()

    .HasMaxLength(50);

  entity.Property(e => e.TimeStamp)

    .IsRowVersion()

    .IsConcurrencyToken();

});

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

Стандартные значения

Интерфейс Fluent API предлагает методы, позволяющие устанавливать стандартные значения для столбцов. Стандартное значение может иметь тип значения или быть строкой SQL. Например, вот как установить стандартное значение Color для новой сущности Car в Black:

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

modelBuilder.Entity<Car>(entity =>

{

...

  entity.Property(e => e.Color)

  .HasColumnName("CarColor")

  .IsRequired()

  .HasMaxLength(50)

<b>  .HasDefaultValue(&quot;Black&quot;);</b>

});

Чтобы установить значение для функции базы данных (вроде getdate()), применяйте метод HasDefaultValueSql(). Предположим, что в класс Car было добавлено свойство DateTime по имени DateBuilt, а стандартным значением должна быть текущая дата, получаемая с использованием метода getdate() в SQL Server. Столбцы конфигурируются следующим образом:

modelBuilder.Entity&lt;Car&gt;(entity =&gt;

{

  ...

  entity.Property(e =&gt; e.DateBuilt)

  .HasDefaultValueSql(&quot;getdate()&quot;);

});

Как и в случае применения SQL для вставки записи, если свойство, которое отображается на столбец со стандартным значением, имеет значение, когда EF Core вставляет запись, то вместо стандартного значения столбца будет использоваться значение свойства. Если значение свойства равно null, тогда применяется стандартное значение столбца.

Проблема возникает при наличии стандартного значения у типа данных свойства. Вспомните, что стандартное значение для числовых типов составляет 0, а для булевских — false. Если вы установите значение числового свойства в 0 или булевского свойства в false и затем вставите такую сущность, тогда инфраструктура EF Core будет трактовать это свойство как не имеющее установленного значения. При отображении свойства на столбец со стандартным значением используется стандартное значение в определении столбца.

Например, добавьте в класс Car свойство типа bool по имени IsDrivable. Установите в true стандартное значение для отображения свойства на столбец:

// Car.cs

public class Car : BaseEntity

{

  ...

<b>  public bool IsDrivable { get; set; }</b>

}

Перейти на страницу:
Комментариев (0)