Язык программирования C#9 и платформа .NET5
Часть 440 из 642 Информация о книге
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и конфигурируются свойства принадлежащего сущностного класса:TimeStampmodelBuilder.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и добавив код, который ограничивает удаление сущности, имеющей зависимые сущности:TimeStampmodelBuilder.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настраивается на каскадное удаление:OrdermodelBuilder.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, чтобы отфильтровывать неуправляемые автомобили. Обратите внимание, что этот код находится не в том же блоке, где был предыдущий код. Никаких формальных причин разносить код не существует; просто здесь демонстрируется альтернативный синтаксис для конфигурирования в отдельных блоках:OrdermodelBuilder.Entity<Order>().HasQueryFilter(e => e.CarNavigation!.IsDrivable);Сущность Car
Шаблонный класс содержит конфигурацию для класса
, который понадобится изменить наInventory. СвойствоCarнужно удалить, а в конфигурации навигационных свойств изменить имена свойств наTimeStampиMakeNavigation. Сущность получает фильтр запросов для отображения по умолчанию только управляемых автомобилей и устанавливает стандартное значение свойстваCarsвIsDrivable. Код должен иметь следующий вид:true