public DbSet
public DbSet
public DbSet
public DbSet
Обновление кода Fluent API
Код Fluent API находится в переопределенной версии метода OnModelCreating() и использует экземпляр класса ModelBuilder для обновления модели.
Сущность SeriLogEntry
Первое изменение, вносимое в метод OnModelCreating(), касается добавления кода Fluent API для конфигурирования сущности SeriLogEntry. Свойство Properties является XML-столбцом SQL Server, а свойство TimeStamp отображается в SQL Server на столбец datetime2 со стандартным значением, установленным в результат функции getdate() из SQL Server. Добавьте в метод OnModelCreating() следующий код:
modelBuilder.Entity
{
entity.Property(e => e.Properties).HasColumnType("Xml");
entity.Property(e => e.TimeStamp).HasDefaultValueSql("GetDate()");
});
Сущность CreditRisk
Далее понадобится модифицировать код сущности CreditRisk. Блок конфигурирования для столбца TimeStamp удаляется, т.к. столбец конфигурируется в BaseEntity. Код конфигурирования навигации должен быть скорректирован с учетом новых имен. Кроме того, выполняется утверждение о том, что навигационное свойство не равно null. Другое изменение связано с конфигурированием свойства типа принадлежащей сущности, чтобы сопоставить с именами столбцов для FirstName и LastName, и добавлением вычисляемого значения для свойства FullName. Ниже показан обновленный блок для сущности CreditRisk с изменениями, выделенными полужирным:
modelBuilder.Entity
{
entity.HasOne(d => d.CustomerNavigation)
.WithMany(p => p!.CreditRisks)
.HasForeignKey(d => d.CustomerId)
.HasConstraintName("FK_CreditRisks_Customers");
entity.OwnsOne(o => o.PersonalInformation,
pd =>
{
pd.Property
.HasColumnName(nameof(Person.FirstName))
.HasColumnType("nvarchar(50)");
pd.Property
.HasColumnName(nameof(Person.LastName))
.HasColumnType("nvarchar(50)");
pd.Property(p => p.FullName)
.HasColumnName(nameof(Person.FullName))
.HasComputedColumnSql("[LastName] + ', ' + [FirstName]");
});
});
Сущность Customer
Следующим обновляется блок для сущности Customer. Здесь удаляется код для TimeStamp и конфигурируются свойства принадлежащего сущностного класса:
modelBuilder.Entity
{
entity.OwnsOne(o => o.PersonalInformation,
pd =>
{
pd.Property(p => p.FirstName).HasColumnName(nameof(Person.FirstName));
pd.Property(p => p.LastName).HasColumnName(nameof(Person.LastName));
pd.Property(p => p.FullName)
.HasColumnName(nameof(Person.FullName))
.HasComputedColumnSql("[LastName] + ', ' + [FirstName]");
});
});
Сущность Make
Для сущности Make необходимо модифицировать блок конфигурирования, удалив свойство TimeStamp и добавив код, который ограничивает удаление сущности, имеющей зависимые сущности:
modelBuilder.Entity
{
entity.HasMany(e => e.Cars)
.WithOne(c => c.MakeNavigation!)
.HasForeignKey(k => k.MakeId)
.OnDelete(DeleteBehavior.Restrict)
.HasConstraintName("FK_Make_Inventory");
});
Сущность Order
Для сущности Order обновите имена навигационных свойств и добавьте утверждение, что обратные навигационные свойства не равны null. Вместо ограничения удалений отношение Customer с Order настраивается на каскадное удаление:
modelBuilder.Entity
{