我在與檢測導航屬性的變化麻煩導航屬性的變化:實體框架不會檢測
我的測試模型是這樣的:
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public virtual Address Address { get; set; }
}
public class Address
{
public int Id { get; set; }
public string Name { get; set; }
}
我已經創建並保存具有Name和Address屬性的Person類型的對象已分配。我的問題是,如果我從數據庫中取回Person對象並更改Address屬性(例如Null),那麼e.f.沒有檢測到變化! 我的代碼是這樣的:
using (var ctx = new EFContext())
{
Person p = ctx.People.First();
//p.Address IS NOT NULL!
p.Address = null;
var entry = ctx.Entry(p);
}
爲什麼entry.State
不變?
編輯:如果我調用SaveChanges,記錄被正確保存(地址變爲空)!
編輯2:我創建了外鍵屬性作爲比利建議,如果我檢查在Visual Studio中的Person對象的狀態被修改..如果我不與調試器停止檢查對象的值狀態不變!
編輯3:使用ctx.People.Include加載Person對象(x => x.Address).First();解決了這個問題。有沒有辦法避免調用Include並繼續修改Address屬性而不是AddressId?
如果您調用ctx.DetectChanges(),會發生什麼? – Maarten 2012-07-26 13:30:41
什麼都沒有。結果是一樣的!! – Mones 2012-07-26 13:31:22