При настройке сопоставлений моделей в EF Core я хочу установить некоторые общие правила сопоставления, например. сообщить каждому классу, имеющему свойство Id, что это свойство отображается в столбец БД ID.
Используя Entity Framework, я смог добиться этого с помощью этого кода:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Types<IEntity<long>>().Configure(c =>
{
c.Property(x => x.Id).HasColumnName("ID");
});
}
(IEntity<long> - это простой интерфейс, имеющий только одно свойство long Id { get; set; }. Каждый класс сущности в моей модели просто реализует этот интерфейс.)
Возможно ли что-нибудь подобное и с Entity Framework Core 2.2+?





В итоге у меня получилось вот такое решение:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
foreach (IMutableEntityType mutableEntityType in modelBuilder.Model.GetEntityTypes())
{
bool isEntity = mutableEntityType.ClrType.GetInterface($"{nameof(IEntity<int>)}`1") != null;
if (isEntity)
{
modelBuilder.Entity(mutableEntityType.ClrType).Property(nameof(IEntity<int>.Id)).HasColumnName("ID");
}
}
}