У меня много классов выглядит следующим образом:
public class ModelOneConfiguration
{
public ModelOneConfiguration(EntityTypeBuilder<ModelOne> entity)
{
entity.Property(e => e.Id).IsRequired().HasDefaultValueSql("NEWID()");
entity.Property(e => e.CreatedAt).HasDefaultValueSql("getutcdate()").ValueGeneratedOnAdd();
entity.Property(e => e.UpdatedAt).HasDefaultValueSql("getutcdate()").ValueGeneratedOnUpdate();
entity.Property(e => e.FirstName).IsRequired();
entity.Property(e => e.LastName).IsRequired();
entity.Property(e => e.Email).IsRequired();
}
}
И вызывать его из класса контекста Db:
protected override void OnModelCreating(ModelBuilder builder)
{
new ModelOneConfiguration(builder.Entity<ModelOne>());
….other classes as well…
base.OnModelCreating(builder);
}
Когда я выполняю миграцию, она отлично работает со следующими результатами:
Id = table.Column<Guid>(nullable: false, defaultValueSql: "NEWID()"),
CreatedAt = table.Column<DateTimeOffset>(nullable: false, defaultValueSql: "getutcdate()"),
UpdatedAt = table.Column<DateTimeOffset>(nullable: true, defaultValueSql: "getutcdate()"),
FirstName = table.Column<string>(nullable: false),
LastName = table.Column<string>(nullable: false),
Email = table.Column<string>(nullable: false)
Пока все хорошо.
Теперь я попытался обернуть Id, CreatedAt и updatedAt в базовый класс, чтобы использовать его со всеми другими моими классами конфигурации модели.Итак, что я сделал, я следовал этому примеру , на который ответил Иван Стоев.
Итак, для моего базового класса я сделал следующее:
public class BaseConfiguration<TEntity> : IEntityTypeConfiguration<TEntity> where TEntity : BaseEntities
{
public virtual void Configure(EntityTypeBuilder<TEntity> entity)
{
entity.Property(e => e.Id).IsRequired().HasDefaultValueSql("NEWID()");
entity.Property(e => e.CreatedAt).HasDefaultValueSql("getutcdate()").ValueGeneratedOnAdd();
entity.Property(e => e.UpdatedAt).HasDefaultValueSql("getutcdate()").ValueGeneratedOnUpdate();
}
}
Затем я расширил конфигурацию моей моделикласс:
public class ModelOneConfiguration : BaseConfiguration<ModelOne>
{
public ModelOneConfiguration(EntityTypeBuilder<ModelOne> entity)
{
entity.Property(e => e.FirstName).IsRequired();
entity.Property(e => e.LastName).IsRequired();
entity.Property(e => e.Email).IsRequired();
}
}
Теперь, когда я запускаю миграцию, генерируется следующее
Id = table.Column<Guid>(nullable: false),
CreatedAt = table.Column<DateTimeOffset>(nullable: false),
UpdatedAt = table.Column<DateTimeOffset>(nullable: true),
FirstName = table.Column<string>(nullable: false),
LastName = table.Column<string>(nullable: false),
Email = table.Column<string>(nullable: false)
Как мы видим, defaultValueSql: "NEWID()"
, defaultValueSql: "getutcdate()"
просто отсутствуют в Id
, CreatedAt
и UpdatedAt
.
И я использую Core 2.2 с EF core 2.2.
Мой вопрос очень прост:
Что я делаю неправильно и как это можно сделатьбыть исправленным?