modelBuilder.Entity<CreditRisk>(entity =>
{
entity.HasOne(d => d.Customer<b>Navigation</b>)
.WithMany(p => p!.CreditRisks)
.HasForeignKey(d => d.CustomerId)
.HasConstraintName("FK_CreditRisks_Customers");
<b> entity.OwnsOne(o => o.PersonalInformation,</b>
<b> pd =></b>
<b> {</b>
<b> pd.Property<string>(nameof(Person.FirstName))</b>
<b> .HasColumnName(nameof(Person.FirstName))</b>
<b> .HasColumnType("nvarchar(50)");</b>
<b> pd.Property<string>(nameof(Person.LastName))</b>
<b> .HasColumnName(nameof(Person.LastName))</b>
<b> .HasColumnType("nvarchar(50)");</b>
<b> pd.Property(p => p.FullName)</b>
<b> .HasColumnName(nameof(Person.FullName))</b>
<b> .HasComputedColumnSql("[LastName] + ', ' + [FirstName]");</b>
<b> });</b>
});
Сущность Customer
Следующим обновляется блок для сущности
Customer
. Здесь удаляется код для
TimeStamp
и конфигурируются свойства принадлежащего сущностного класса:
modelBuilder.Entity<Customer>(entity =>
{
<b> entity.OwnsOne(o => o.PersonalInformation,</b>
pd =>
<b> {</b>
pd.Property(p
=> p.FirstName).HasColumnName(nameof(Person.
FirstName));
<b> pd.Property(p => p.LastName).HasColumnName(nameof(Person.LastName));</b>
<b> pd.Property(p => p.FullName)</b>
<b> .HasColumnName(nameof(Person.FullName))</b>
<b> .HasComputedColumnSql("[LastName] + ', ' + [FirstName]");</b>
<b> });</b>
});
Сущность Make
Для сущности
Make
необходимо модифицировать блок конфигурирования, удалив свойство
TimeStamp
и добавив код, который ограничивает удаление сущности, имеющей зависимые сущности:
modelBuilder.Entity<Make>(entity =>
{
<b> entity.HasMany(e => e.Cars)</b>
<b> .WithOne(c => c.MakeNavigation!)</b>
<b> .HasForeignKey(k => k.MakeId)</b>
<b> .OnDelete(DeleteBehavior.Restrict)</b>
<b> .HasConstraintName("FK_Make_Inventory");</b>
});
Сущность Order
Для сущности
Order
обновите имена навигационных свойств и добавьте утверждение, что обратные навигационные свойства не равны
null
. Вместо ограничения удалений отношение
Customer
с
Order
настраивается на каскадное удаление:
modelBuilder.Entity<Order>(entity =>
{
entity.HasOne(d => d.CarNavigation)
.WithMany(p => p!.Orders)
.HasForeignKey(d => d.CarId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_Orders_Inventory");
entity.HasOne(d => d.CustomerNavigation)
.WithMany(p => p!.Orders)
.HasForeignKey(d => d.CustomerId)
.OnDelete(DeleteBehavior.Cascade)
.HasConstraintName("FK_Orders_Customers");
});
Настройте фильтр для свойства
CarNavigation
сущности
Order
, чтобы отфильтровывать неуправляемые автомобили. Обратите внимание, что этот код находится не в том же блоке, где был предыдущий код. Никаких формальных причин разносить код не существует; просто здесь демонстрируется альтернативный синтаксис для конфигурирования в отдельных блоках:
modelBuilder.Entity<Order>().HasQueryFilter(e => e.CarNavigation!.IsDrivable);
Сущность Car
Шаблонный класс содержит конфигурацию для класса
Inventory
, который понадобится изменить на
Car
. Свойство
TimeStamp
нужно удалить, а в конфигурации навигационных свойств изменить имена свойств на
MakeNavigation
и
Cars
. Сущность получает фильтр запросов для отображения по умолчанию только управляемых автомобилей и устанавливает стандартное значение свойства
IsDrivable
в
true
. Код должен иметь следующий вид: