幾年前,我和Entity Framework一起工作過,這可能只是我有點生疏。我有分離的實體,而實體又有多個子實體。在我的情況下,它是一個人的實體,每個人都有多個地址。實體框架和一對多的關係不能正確保存
myPerson.FirstName="update first name";
//assuming they already have an address in the first entry
//with appropriate primary keys and foreign key ids, I could do:
myPerson.Addresses.First().Line1="update line 1";
myPerson.Addresses.Add(new Address(){line1="weee",line2="aaaa" postal="12345", type="work"});
myDb.Person.Attach(myPerson);
myDb.Entry(myPerson).State=EntityState.Modified;
myDb.SaveChanges();
當我做這樣的場景時,我得到了我期待的名字。它更新第一個名字,並且如預期的那樣在上面的代碼中實際上將所有其他字段(LastName,Birthday等等)清空。但它不會爲該人創建新地址,也不會更新現有地址。
我不記得它需要數據庫上下文的額外工作才能知道如何更新與上述人員相關的相關實體。在我的谷歌搜索,我似乎聽到的故事,我需要做相當數量的工作從數據庫加載收集,然後去鎮上這樣。我希望事實並非如此。
感謝您抽出時間發表評論。我回想起上一次做EF的時候,我意識到我處在一個非常不同的場景中。在那個較舊的場景中,我正在對本地sqlite文件執行EF作爲WPF應用程序的數據存儲。所以我在一個本地文件中處於一個富有狀態的環境中,而且我幾乎總是在處理連接的實體而不是分離的實體。 – Danny 2014-12-06 23:10:42
在我當前的場景中,我正在創建一些東西,讓我們的業務邏輯開發人員針對使業務邏輯代碼與實體框架的具體細節分開的接口進行編寫。我們較早的應用程序是由我的前任編寫的,沒有抽象出與業務代碼中使用的不同的ORM,因此我們完全陷入這些應用程序中的一個不同的(並且非常討厭的ORM)。我不想再犯這個錯誤,儘管我懷疑我們會永遠不想從EF那裏改變。太糟糕了,對於分離的實體而言,它必須非常棘手。謝謝。 – Danny 2014-12-06 23:16:44