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
{