コードファーストアプローチ(ただし、既存のデータベーススキーマを使用)では、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を同じテーブルにマップできないことが示されます。
私たちのマッピングの何が問題になっているのかについて何か考えはありますか?同じテーブルに異なるエンティティをどのように配置できるか考えてみてください。
ご協力いただきありがとうございます