最近、ソフトウェアを .NET 4.0 および EF 4.0 (自己追跡エンティティなし) (以前の .NET 3.5 SP1) にアップグレードしました。現在、以前の作業コードで新しい例外が発生しましたが、これは理解できません。
Resident と呼ばれるエンティティと、ResidentExtension と呼ばれる別のエンティティがあります。これは、すでに大きな Resident エンティティを 1 対 (0/1) の関係で拡張します。次の 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 を作成し、それをコンテキストに追加して再度送信することです。しかし、これは以前のやり方ではありません。
これを古い方法で機能させる方法を知っている人はいますか?