KnigaRead.com/
KnigaRead.com » Компьютеры и Интернет » Базы данных » Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

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

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Троелсен Эндрю, "Язык программирования C#9 и платформа .NET5" бесплатно, без регистрации.
Перейти на страницу:

modelBuilder.Entity<CreditRisk>(entity =>

{

  entity.HasOne(d =&gt; d.Customer<b>Navigation</b>)

      .WithMany(p =&gt; p!.CreditRisks)

      .HasForeignKey(d =&gt; d.CustomerId)

      .HasConstraintName(&quot;FK_CreditRisks_Customers&quot;);

<b>  entity.OwnsOne(o =&gt; o.PersonalInformation,</b>

<b>    pd =&gt;</b>

<b>    {</b>

<b>      pd.Property&lt;string&gt;(nameof(Person.FirstName))</b>

<b>           .HasColumnName(nameof(Person.FirstName))</b>

<b>           .HasColumnType(&quot;nvarchar(50)&quot;);</b>

<b>      pd.Property&lt;string&gt;(nameof(Person.LastName))</b>

<b>           .HasColumnName(nameof(Person.LastName))</b>

<b>           .HasColumnType(&quot;nvarchar(50)&quot;);</b>

<b>      pd.Property(p =&gt; p.FullName)</b>

<b>           .HasColumnName(nameof(Person.FullName))</b>

<b>           .HasComputedColumnSql(&quot;[LastName] + ', ' + [FirstName]&quot;);</b>

<b>    });</b>

});

Сущность Customer

Следующим обновляется блок для сущности

Customer
. Здесь удаляется код для
TimeStamp
и конфигурируются свойства принадлежащего сущностного класса:

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

{

<b>  entity.OwnsOne(o =&gt; o.PersonalInformation,</b>

 pd =&gt;

<b>  {</b>

    pd.Property(p
 =&gt; p.FirstName).HasColumnName(nameof(Person.
FirstName));

<b>    pd.Property(p =&gt; p.LastName).HasColumnName(nameof(Person.LastName));</b>

<b>    pd.Property(p =&gt; p.FullName)</b>

<b>      .HasColumnName(nameof(Person.FullName))</b>

<b>      .HasComputedColumnSql(&quot;[LastName] + ', ' + [FirstName]&quot;);</b>

<b>   });</b>

});

Сущность Make

Для сущности

Make
необходимо модифицировать блок конфигурирования, удалив свойство
TimeStamp
и добавив код, который ограничивает удаление сущности, имеющей зависимые сущности:

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

{

<b>  entity.HasMany(e =&gt; e.Cars)</b>

<b>      .WithOne(c =&gt; c.MakeNavigation!)</b>

<b>      .HasForeignKey(k =&gt; k.MakeId)</b>

<b>      .OnDelete(DeleteBehavior.Restrict)</b>

<b>      .HasConstraintName(&quot;FK_Make_Inventory&quot;);</b>

});

Сущность Order

Для сущности

Order
обновите имена навигационных свойств и добавьте утверждение, что обратные навигационные свойства не равны
null
. Вместо ограничения удалений отношение
Customer
с
Order
настраивается на каскадное удаление:

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

{

  entity.HasOne(d =&gt; d.CarNavigation)

     .WithMany(p =&gt; p!.Orders)

     .HasForeignKey(d =&gt; d.CarId)

     .OnDelete(DeleteBehavior.ClientSetNull)

     .HasConstraintName(&quot;FK_Orders_Inventory&quot;);

  entity.HasOne(d =&gt; d.CustomerNavigation)

     .WithMany(p =&gt; p!.Orders)

     .HasForeignKey(d =&gt; d.CustomerId)

     .OnDelete(DeleteBehavior.Cascade)

     .HasConstraintName(&quot;FK_Orders_Customers&quot;);

});

Настройте фильтр для свойства

CarNavigation
сущности
Order
, чтобы отфильтровывать неуправляемые автомобили. Обратите внимание, что этот код находится не в том же блоке, где был предыдущий код. Никаких формальных причин разносить код не существует; просто здесь демонстрируется альтернативный синтаксис для конфигурирования в отдельных блоках:

modelBuilder.Entity&lt;Order&gt;().HasQueryFilter(e =&gt; e.CarNavigation!.IsDrivable);

Сущность Car

Шаблонный класс содержит конфигурацию для класса

Inventory
, который понадобится изменить на
Car
. Свойство
TimeStamp
нужно удалить, а в конфигурации навигационных свойств изменить имена свойств на
MakeNavigation
и
Cars
. Сущность получает фильтр запросов для отображения по умолчанию только управляемых автомобилей и устанавливает стандартное значение свойства
IsDrivable
в
true
. Код должен иметь следующий вид:

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*