Bird.CageIdがBirdのキーではないため、Cageは単一のBirdを参照できないという問題があります。だから1対多の関係として宣言することができますが、Bird.CageIdには一意的な制約を設定して、実際に同じ檻に2匹の鳥を入れることはできません。
public class MyContext : DbContext
{
public DbSet<Animal> Animals { get; set; }
public DbSet<Cage> Cages { get; set; }
}
public class Cage
{
public int CageID { get; set; }
public virtual ICollection<Bird> Birds { get; set; }
}
public abstract class Animal
{
public int AnimalID { get; set; }
public string Name { get; set; }
}
public class Bird : Animal
{
[ForeignKey("Cage"),Index(IsUnique =true)]
public int CageID { get; set; }
public Cage Cage { get; set; }
}
public class Shark : Animal
{
public int AquariumID { get; set; }
}
別のオプションは、ケージの外部キーを置くことです:このよう
public class MyContext : DbContext
{
public DbSet<Animal> Animals { get; set; }
public DbSet<Cage> Cages { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Bird>().HasOptional(b => b.Cage).WithRequired(c => c.Bird);
}
}
public class Cage
{
[Key]
public int CageId { get; set; }
[ForeignKey("CageId")]
public virtual Bird Bird { get; set; }
}
public abstract class Animal
{
public int AnimalID { get; set; }
public string Name { get; set; }
}
public class Bird : Animal
{
public Cage Cage { get; set; }
}
public class Shark : Animal
{
public int AquariumID { get; set; }
}
それから私は、エラー 'EntityType「アニマル」は何のキー定義されていません取得します。このEntityTypeのキーを定義します.'私のコードスニペットで何か他のものを変更しましたか? – Feofilakt
@Feofilakt今、Animal abstractクラスを追加しました。もう一度やってみてください。 – arslanaybars
いいえ、考え方は、どの動物にもCageプロパティがないことです。たとえば、サメはケージではなく、アクアリウム – Feofilakt