我们最近将我们的软件升级到 .NET 4.0 和 EF 4.0(没有自跟踪实体)(以前的 .NET 3.5 SP1)。现在在以前的工作代码中引发了一个新的异常,我们不明白。
我们有一个名为 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。
它发生在生成代码的设置器中:
[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;
}
}
我找到的唯一解决方案是先提交不带扩展名的 Resident 实体,然后创建一个设置外键 (ResidentID) 的 ResidentExtension 并将其添加到上下文中并再次提交。但这不是以前的工作方式。
有谁知道如何使这项工作再次以旧方式工作?