В приложении, которое я разрабатываю, каждая таблица имеет таблицу Log с точно такой же структурой для отслеживания истории.Теперь при разработке этой концепции в Entity Framework 6 я использовал следующий метод:
Разделение общих свойств в интерфейсе;
public interface ICar
{
int Id { get; set; }
string CarCode { get; set; }
string CarName { get; set; }
}
Затем я создаю фактическую таблицу, используя приведенный выше интерфейс следующим образом;
public partial class Car : ICar, IEntity
{
public int Id { get; set; }
public string CarCode { get; set; }
public string CarName { get; set; }
#region IEntity fields
public int Key { get; set; }
#endregion
}
Таблица журнала;
public partial class LogCar : ICar, IEntity, ILogEntity
{
public int CarPk { get; set; }
public string CarCode { get; set; }
public string CarName { get; set; }
#region IEntity fields
public int Key { get; set; }
#endregion
#region ILogEntity fields
public int LogKey { get; set; }
#endregion
}
IEntity
имеет поля, которые должны содержать все таблицы, а ILogEntity
имеет поля, которые должны содержать только таблицы журнала.
А на DbContext
;
public partial class MyContext : DbContext
{
public MyContext()
: base(ConnectionStringBuilder.Instance.Construct())
{
}
public virtual DbSet<Car> Cars { get; set; }
public virtual DbSet<LogCar> LogCars { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Types<ICar>().Configure(c => c.Property(p => p.Id).IsRequired());
modelBuilder.Types<ICar>().Configure(c => c.Property(p => p.CarCode).IsRequired().HasMaxLength(5));
modelBuilder.Types<ICar>().Configure(c => c.Property(p => p.CarName).IsRequired().HasMaxLength(50));
modelBuilder.Types<IEntity>().Configure(c => c.Property(p => p.Key).IsRequired());
modelBuilder.Types<ILogEntity>().Configure(c => c.Property(p => p.LogKey).IsRequired());
}
}
Теперь я пытаюсь перенести этот кусок кода на Entity Framework Core 2.2.6 (ага, 3).Я застрял в той части, где modelBuilder.Types<IEntity>().Configure
недоступен в Core, а также не поддерживает интерфейсы.Как я могу кодировать сценарий выше в EF Core?
Примечание: таблица и таблица журнала должны быть полностью отделены от отдельных таблиц в БД.