既存のSQL DBのEF 4.2コードファーストに問題があります。EFコードまず、静的な部分を持つ複合外部キー
私は企業、ユーザーのような複数のエンティティを持っている、など
共通の情報は、プライマリキー[実体識別子、EntityTypeId]で、エンティティと呼ばれるseprateテーブルに格納されています。
- 実体識別子はEntityTypeId
- などCorporateId、ユーザーIDに対応し、静的Idは、私は次のクラスのデザインを持っているエンティティ間discrimiatorよう
を使用しています。
public class User
{
public int Id {get;set;}
public int EntityTypeId { get { return 1; } set { }}
public Entity Entity {get;set;}
}
public class Entity
{
public int Id {get;set;}
public int EntityTypeId {get;set;}
}
このように、EntityTypeIdは静的プロパティであり、ユーザーテーブルには対応する列はありません。
マップ:私はこのコードを実行すると
public UserMap()
{
// Primary Key
this.HasKey(t => t.Id);
// Table & Column Mappings
this.ToTable("User");
this.Property(t => t.Id).HasColumnName("UserId");
// Relationships
this.HasRequired(t => t.Entity)
.WithMany()
.HasForeignKey(p => new { p.Id, p.EntityTypeId }); //<-- Problem
}
public EntityMap()
{
// Primary Key
this.HasKey(t => new { t.Id, t.EntityTypeId });
// Table & Column Mappings
this.ToTable("Entity");
this.Property(t => t.Id).HasColumnName("EntityId");
this.Property(t => t.EntityTypeId).HasColumnName("EntityTypeId");
}
私はエラーを取得しています: System.Data.SqlClient.SqlException:無効な列名 'EntityTypeId'。
ユーザーテーブルに列EntityTypeIdが存在しないためだと思います。 テーブルにこの列を作成できないため、この問題の回避方法はありますか。たくさん