EFコアは抽象ベースエンティティをサポートしていますか?

c# ef-code-first ef-fluent-api entity-framework entity-framework-core

質問

以前の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-core 1.1.0でこのモデルを使うことができます:

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; }
}

このマッピングをコンテキストで使用すると、

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");
}

これはこの素晴らしいモデルにつながります:

ここに画像の説明を入力



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ