Используя подход «сначала код» (но с существующей схемой базы данных), мы пытаемся сопоставить 2 разных объекта (клиент и ресурс) с одной и той же таблицей. Обе сущности имеют одинаковые ключи и сопоставление.
Однако при запуске приложения у нас возникает ошибка времени выполнения, сообщающая нам это загадочное сообщение:
System.InvalidOperationException: Type 'Resource' cannot be mapped to table 'CLIENT' since type 'Customer' also maps to the same table and their primary key names don't match. Change either of the primary key property names so that they match.
Пример:
public class EntityA
{
public string ID { get; set; }
public string Discriminator { get; set; }
public string TimeStamp { get; set; }
}
public class EntityB
{
public string ID { get; set; }
public string Discriminator { get; set; }
public string CreatedBy { get; set; }
}
public class EntityAConfiguration : EntityTypeConfiguration<EntityA>
{
public EntityAConfiguration()
{
HasKey(x => new {x.ID, x.Discriminator } );
Property(x => x.ID).HasColumnName("MyTable_ID").HasDatabaseGenerationOption(DatabaseGenerationOption.None);
Property(x => x.Discriminator).HasColumnName("MyTable_Discriminator").HasDatabaseGenerationOption(DatabaseGenerationOption.None);
Property(x => x.TimeStamp).HasColumnName("MyTable_TimeStamp");
ToTable("MyTable");
}
}
public class EntityBConfiguration : EntityTypeConfiguration<EntityB>
{
public EntityBConfiguration()
{
HasKey(x => new { x.ID, x.Discriminator });
Property(x => x.ID).HasColumnName("MyTable_ID").HasDatabaseGenerationOption(DatabaseGenerationOption.None);
Property(x => x.Discriminator).HasColumnName("MyTable_Discriminator").HasDatabaseGenerationOption(DatabaseGenerationOption.None);
Property(x => x.CreatedBy).HasColumnName("MyTable_CreatedBy");
ToTable("MyTable");
}
}
Приведенный выше код похож на наш код клиента/ресурса (но проще для объяснения!). Однако получите то же сообщение об ошибке, в котором говорится, что EntityA и EntityB не могут быть сопоставлены с одной и той же таблицей, поскольку имена их первичных ключей не совпадают.
Есть идеи, что не так с нашим отображением? Любая идея, как мы можем использовать разные объекты в одной таблице?
Спасибо за вашу помощь