我想我遇到了一個錯誤,看起來EF在刪除並重新插入實體後沒有很好地處理引用。我已經成功與下面的代碼重現它(假設所有的斷言通過,除了一個我在評論中討論):
引用保留爲空
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);
誰能告訴我什麼是怎麼回事?
編輯: 我的實體首先使用數據庫生成,然後使用DbContext/POCO生成器來生成。
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 2012-01-12 21:32:11
您的實體如何定義?先編碼?從數據庫生成? – 2012-01-12 21:34:08
@ cadrell0 - 我怕這不是一個選項,因爲我需要延遲加載。 – Fabian 2012-01-12 21:52:59