2017-01-06 6 views
0

複数のエンティティでコンテキストを構築しています。すべてのエンティティは、ID(guid)を持つ抽象クラスに基づいて構築されます。エンティティフレームワーク - 複数エンティティの仮想テーブル(コード先頭)

すべてのエンティティが共通のログテーブルとの関係を持ちますが、名前付けによる関係を理解するためにEFCFを取得することはできません。

public class Log { 
    public BaseEntity Entity {get;set;} 
    public Guid EntityID {get;set;} 
} 

public class Example : BaseEntity { 
    public virtual ICollection<Log> Logs {get;set;} 
} 

誰でもパターンをサポートできますか?我々は抽象化を試み、OnModelCreatingなどを設定しましたが、サポートされていない命名のためにあいまいなエラーが続いています。これらを追加すると、

[ForeignKey("EntityID")] 
public Example Example {get;set;} 
[ForeignKey("EntityID")] 
public Example5 Example5 {get;set;} 
[ForeignKey("EntityID")] 
public Example2 Example2 {get;set;} 

Logクラスのすべてのプロパティが正常に動作します。新しいLogエントリを追加するときに問題が発生します。

+0

ログを作成するときはどうしますか? BaseEntityとしてキャストしようとしましたか?おそらく型の値なので、手動で型に戻すことができますか? – MiltoxBeyond

+0

または、GUIDに基づいてゲッターにすることはできますか? – MiltoxBeyond

+0

論理的に考える。リレーショナルデータベースでそのようなFKを作成できますか? –

答えて

0

共通のフィールドを基本クラスに抽象化することができます。

モデル構築にMapInheritedProperties()を使用

(及び続く)

modelBuilder.Entity<Models.Example>().Map(x => x.MapInheritedProperties()); 

modelBuilder.Entity<Models.Log>() 
    .HasRequired(x => x.BaseEntity) 
    .WithMany(x => x.Logs) 
    .Map(x => 
    { 
     x.ToTable("Example"); 
     x.MapKey(new[] { "ID" }); 
    }) 
    .WillCascadeOnDelete(false); 

私が今いる限り、彼らは基本クラスから派生して、任意のエンティティに「仮想」テーブルを割り当てることができます。

関連する問題