既存の SQL DB での EF 4.2 Code First に問題があります。
企業、ユーザーなどの複数のエンティティがあります。
共通の情報は、主キー [EntityId, EntityTypeId] を持つエンティティと呼ばれる別のテーブルに格納されます。
- EntityId は、CorporateId、UserId などに対応します。
- EntityTypeId は、エンティティ間の識別子のように使用される静的 ID です。
次のクラス設計があります。
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: Invalid column name 'EntityTypeId'.
User テーブルに EntityTypeId 列が存在しないためだと思います。テーブルにこの列を作成できないので、この問題を回避する方法はありますか?!
どうもありがとう