以前の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");
}
これはこの素晴らしいモデルにつながります: