複数のレベルの継承を持ち、いくつかの中間クラスが抽象である既存のモデルがあります。モデルは正常に見えますが、データベースを作成しようとすると、次のエラーが発生します。
13、20行目から始まるフラグメントのマッピングの問題:異なるキーを持つ2つのエンティティが同じ行にマッピングされます。これらの2つのマッピングフラグメントが、異なるキーを持つ2つのエンティティグループを同じ行グループにマップしないようにしてください。
これが、エラーを再現するために書くことができる最も簡単なコードです。Pet
具体的にすれば問題はなくなります。階層内で複数の抽象クラスを許可するにはどうすればよいですか?
public abstract class Animal
{
public int Id { get; set; }
}
public abstract class Pet : Animal
{
public string Name { get; set; }
}
public class Fish : Pet
{
public bool IsFreshwater { get; set; }
}
public class Dog : Pet
{
public bool IsNeutered { get; set; }
}
public class Person : Animal
{
public Pet MyPet { get; set; }
}
public class PersonContext : DbContext
{
public DbSet<Person> People { get; set; }
}
[TestFixture]
public class AnimalTests
{
[Test]
public void CanCreateDatabase()
{
Database.SetInitializer(new DropCreateDatabaseAlways<PersonContext>());
using (var context = new PersonContext())
{
Assert.AreEqual(0, context.People.Count());//fails here
}
}
}
アップデート。これは、生成された.edmxファイルの違いのKDiffスナップです。左側のファイルは失敗した元のコードであり、右側のファイルはDbSet<Pet>
DbContextにを含めたときに生成されるものです。