我有一個WPF應用程序,遵循Model View ViewModel模式,使用實體框架與SQL 2008數據庫進行交互。更改實體框架中的關係/外鍵 - 未保持
問題:
我的問題是在使用DATABSE EF我不能改變外鍵值。我有兩個實體:Site和Key。一個網站可以有很多密鑰。我想將密鑰從一個站點移到另一個站點。我試圖做到這一點使用下面的代碼:
keyToMove.Site = newSite;
dataAccess.SaveChanges(); // this method just does: this.entities.SaveChanges();
我所觀察到
它出現在內存一切正常的應用程序的其他部分反映了這種變化(密鑰將出現在新網站下)。但是,數據庫中的外鍵不會更改,關閉並重新啓動應用程序後,所有更改都將丟失。
在「keyToMove.Site = newSite;」之後,keyToMove,newSite和舊的Site實例都有一個EntityState值爲「Unchanged」,這是不正確的。另外SaveChanges正在返回2,這隻會讓我更加困惑。
的制定者實施的「網站」屬性看起來像在我的模型等導航屬性:
set
{
((global::System.Data.Objects.DataClasses.IEntityWithRelationships)(this)).RelationshipManager.GetRelatedReference<Site>("CmsModel.SiteKeyAssociation", "Site").Value = value;
}
SQL事件探查表明,沒有任何類似的更新被髮送到數據庫引擎,只是一個很長很長選擇。也可以有基於條件的另一實體的效果
「鑰匙」實體繼承
觀光施加到列中的一個。
我正在使用AutoFac IOC容器來提供任何ViewModel誰想要做一些數據訪問與我的數據訪問類的實例(在該示例中的「dataAccess」)的引用。
ObjectContext實例是此類的成員(在註釋中顯示爲「this.entities」)。
dataAccess實例是Singleton Scoped,所以應該只有一個實例在View Models e.i中共享。 「keyToMove」和「newSite」都連接到相同的上下文。
對不起,這篇文章的長度,但我真的不知道這裏發生了什麼,我試圖提供儘可能多的細節,可能有所幫助。請詢問是否有進一步的信息可以幫助。
在此先感謝。
調試通過屬性setter和確保this.ReportPropertyChanged()被調用。 – 2009-08-06 13:35:00
它沒有,setter實現看起來與其他導航屬性相似,請參閱上面的編輯。 – andrej351 2009-08-06 22:57:43
......呃,快速用完頭髮拉出來,請如果你有什麼想法,請點擊這裏 – andrej351 2009-08-07 01:43:33