讓我們把這個簡單的... 假設我有2個實體:實體框架保留幽靈實體?
Application Id: int (primary key, autoincrement) Name: string(60) Client: User SupportEngineer: User User Id: int (primary key, autoincrement) Name: string(60) EmailAddress: string(60)
還假設我有beign參與了一個名爲沒有上下文創建一個接收創建的應用程序的一個實例(在另一層)方法:
var application = new Application { Name = "Visual Studio 2010", Client = new User { Id = 12 }, SupportEngineer = new User { Id = 14 } };
請注意,具有Id == 12和== 14的用戶存在於數據庫中!
public void Create(Application application) { application.Client = Context.Users.FirstOrDefault(e => e.Id == application.Client.Id); application.SupportEngineer = Context.Users.FirstOrDefault(e => e.Id == application.SupportEngineer.Id); Context.Applications.AddObject(application); Context.SaveChanges(); }
當我調用的SaveChanges之前檢查在上下文中的對象,我得到調用爲「補充」 Create方法之前創建的用戶對象。
爲什麼,如果我重寫屬性客戶端和SupportEngineer的值與數據庫中的對象是怎麼回事? 爲什麼手動創建的對象(new User { Id = 12 }, new User { Id = 14 }
)仍然處於「添加」狀態的環境中?
這裏真正的問題是什麼?創建調用後,Application的狀態是否無效? – 2011-05-17 21:22:22
真正的問題是,EF將嘗試創建/插入兩個新用戶這是不希望的behaivor – 2011-05-17 21:56:59
你看你調用'AddObject'之前做些什麼狀態?上下文之外創建 – 2011-05-17 22:02:24