我們最近將我們的軟件升級到.NET 4.0和EF 4.0(沒有自我跟蹤實體)(以前的.NET 3.5 SP1)。現在,前工作代碼中出現了一個新的例外,我們不明白。EntityFramework 4.0:InvalidOperationExeception:違反多重約束
我們有一個名爲Resident的實體,另一個名爲ResidentExtension的實體,它使用1到(0/1)的關係擴展已經很大的Resident實體。下面的C#代碼在我們的應用程序生成一個新的實體:
Residents resident = new Residents()
{
IsNewResident = true,
ResidentImage = Settings.Default.ResidentCardDefaultMaleImage,
IsActive = true,
ResidentCanBeDeleted = true,
ResidentExtensions = new ResidentExtensions(),
ResidentMasterDataState = EvoState.Error,
ResidentBasicDataState = EvoState.Error,
ResidentBenefactorsDataState = EvoState.Error,
};
以下異常這個說法後,直接提出:
多重約束侵犯。關係VOCURA.EntityDataModels.EvocuraCarehomeManagementEntityModel.FK_ResidentExtensions_Residents'的角色'ResidentExtensions'具有多重性1或0..1。
它發生在生成的代碼的setter方法:
[XmlIgnoreAttribute()]
[SoapIgnoreAttribute()]
[DataMemberAttribute()]
[EdmRelationshipNavigationPropertyAttribute("EVOCURA.EntityDataModels.EvocuraCarehomeManagementEntityModel", "FK_ResidentExtensions_Residents", "ResidentExtensions")]
public ResidentExtensions ResidentExtensions
{
get
{
return ((IEntityWithRelationships)this).RelationshipManager.GetRelatedReference<ResidentExtensions>("EVOCURA.EntityDataModels.EvocuraCarehomeManagementEntityModel.FK_ResidentExtensions_Residents", "ResidentExtensions").Value;
}
set
{
((IEntityWithRelationships)this).RelationshipManager.GetRelatedReference<ResidentExtensions>("EVOCURA.EntityDataModels.EvocuraCarehomeManagementEntityModel.FK_ResidentExtensions_Residents", "ResidentExtensions").Value = value;
}
}
我發現還沒有唯一的辦法是先提交駐地實體不帶擴展名,並在此之後,與設置創建ResidentExtension外鍵(ResidentID)並將其添加到上下文並再次提交。但這不是它以前的工作方式。
有誰知道如何使這項工作再次以舊的方式?
一月,你有沒有解決這個問題的方式,你想它的工作? – 2011-03-22 18:15:52
不幸的不是。仍然使用在我的問題的最後部分找到的解決方案;( – JanW 2011-03-28 11:03:53