2

以前のEFのジェネリックエンティティに問題があったことを覚えています。 EFコアはいかがですか?私はこの問題に関連する文書を見つけることができません。例えばEFコアは、一般的な抽象ベースエンティティをサポートしていますか?

public abstract class Parent<TEntity> { 
    public int EntityId { get; set; } 
    public TEntity Entity { get; set; } 
} 

public class Child : Parent<Foo> { 
} 

public class OtherChild : Parent<Bar> { 
} 


// config for child entities includes this: 
config.HasKey(c => c.EntityId); 

これは、子エンティティは、彼らが明確に行う主キーを定義していないことを示すスローされますけど!

私はParentを非ジェネリックにすることでこれを解決できます。

公式ドキュメントはありますか?間違ったことをやっているのですか、これが期待される行動ですか?

私はEF-コア1.1.0でこのモデルを使用することができます
+0

EFモデルに 'Foo'と' Bar'を含めましたか? ef-core 1.1.0ではこれが動作します。 –

+0

@GertArnold私のために働いていません。 – grokky

答えて

1

:コンテキストでのこのマッピングで

public abstract class Parent<TEntity> 
{ 
    public int EntityId { get; set; } 
    public TEntity Entity { get; set; } 
} 

public class Child : Parent<Foo> 
{ 
} 

public class OtherChild : Parent<Bar> 
{ 
} 

public class Foo 
{ 
    public int Id { get; set; } 
} 

public class Bar 
{ 
    public int Id { get; set; } 
} 

enter image description here:この素晴らしいモデルにつながる

protected override void OnModelCreating(ModelBuilder mb) 
{ 
    mb.Entity<Child>().HasKey(a => a.EntityId); 
    mb.Entity<Child>().HasOne(c => c.Entity).WithMany().HasForeignKey("ParentId"); 
    mb.Entity<OtherChild>().HasKey(a => a.EntityId); 
    mb.Entity<OtherChild>().HasOne(c => c.Entity).WithMany().HasForeignKey("ParentId"); 
} 

+0

どのようにイメージを生成しましたか? – grokky

+0

ああ、Sql Server Management Studioのデータベースの下:データベースダイアグラム。 –

関連する問題