ここで同様の質問をたくさん見つけましたが、どれも私の問題を解決するのに役立たないようです。流暢な API と属性は役に立ちませんでした。データベースは作成されましたが、オブジェクトを追加するとクラッシュしました。それ自体のコレクションを持つクラスが必要です。ここに私が持っているコードがあります:
[Table("UObjects")]
public class UObject
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Browsable(false)]
public long ID { get; set; }
public string Name { get; set; }
[Browsable(false)]
public long? ParentID { get; set; }
public virtual UObject UParent { get; set; }
[Browsable(false)]
public virtual ICollection<UObject> UObjects { get; set; }
}
public class MyContext : DbContext
{
public DbSet<UObject> UObjects { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// This fluent API didn't help
//modelBuilder.Entity<UObject>()
// .HasOptional(u => u.UParent)
// .WithMany(u => u.UObjects)
// .HasForeignKey(u => u.ParentID);
//modelBuilder.Entity<UObject>()
// .HasOptional(u => u.UParent)
// .WithMany(u => u.UObjects)
// .Map(c =>
// {
// c.MapKey("ParentID");
// c.ToTable("UObjects");
// });
}
}
データベースのレコードは次のようになります。
ID | Name | ParentID
------------------------------------
1 | First | 0
2 | SubFirst | 1
3 | SubSecond | 1
4 | SubThird | 2
5 | SubFourth | 2
したがって、エンティティをロードした後のオブジェクトの外観は次のとおりです。
- First
- SubFirst
- SubThird
- SubFourth
- SubSecond
しかし、すべてのオブジェクトには空のコレクションがあります。正しく機能させるにはどうすればよいですか?