我们最近将我们的软件升级到.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