私はバグに遭遇したと思います。エンティティを削除して再挿入した後、EFが参照をうまく処理していないようです。私は以下のコードでそれを再現することができた(と仮定し、すべての私はコメントでの話を1以外渡すアサート):
参照のままnull
var database = new TestEntities();
// select and delete the info record
var info = database.Info.First(i => i.ID == 1);
Assert.AreEqual(1, info.MemberID);
// when i uncomment the line below the last Assert fails
// Assert.IsNotNull(info.Member);
database.Info.Remove(info);
// add it again and persist it to the database
database.Info.Add(new Info {
ID = 1,
MemberID = 1
});
database.SaveChanges();
// should not be null ? EDIT: i guess i understand this becoming null
Assert.IsNull(info.Member);
// and even here its still null
info = database.Info.First(i => i.ID == 1);
Assert.IsNull(info.Member);
誰もがここで起こっていただきました!教えてもらえますか?
EDIT: 私のエンティティは、まずデータベースを使用して生成され、imはDbContext/POCOジェネレータを使用して生成されます。この
var info = database.Info.First(i => i.ID == 1);
Assert.AreEqual(1, info.MemberID);
を考えると
public partial class Member
{
public Member()
{
this.Info = new HashSet<Info>();
}
public int ID { get; set; }
public string Name { get; set; }
public virtual ICollection<Info> Info { get; set; }
}
public partial class Info
{
public int ID { get; set; }
public int MemberID { get; set; }
public virtual Member Member { get; set; }
}
遅延ロードをオフにしてみてください。 – cadrell0
エンティティはどのように定義されていますか?最初にコードしますか?データベースから生成されますか? –
@ cadrell0 - 私は怠惰な読み込みが必要なので、オプションではないことを恐れています。 – Fabian