Wir haben unsere Software kürzlich auf .NET 4.0 und EF 4.0 (ohne Self-Tracking-Entities) (früher .NET 3.5 SP1) aktualisiert. Jetzt gibt es eine neue Ausnahme im früheren Arbeitscode, die wir nicht verstehen.EntityFramework 4.0: InvalidOperationExeception: Multiplikationsbedingung verletzt
Wir haben eine Entität namens Resident und eine andere Entität namens ResidentExtension, die die bereits große residente Entität mit einer Beziehung von 1 zu (0/1) erweitert. Der folgende C# Code generiert eine neue Einheit in unserer Anwendung:
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,
};
Die folgende Ausnahme unmittelbar nach dieser Anweisung ausgelöst wird:
Multiplicity Einschränkung verletzt. Die Rolle 'ResidentExtensions' der Beziehung VOCURA.EntityDataModels.EvocuraCarehomeManagementEntityModel.FK_ResidentExtensions_Residents 'hat Multiplizität 1 oder 0..1.
Es tritt in dem Setter des generierten Codes:
[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;
}
}
Die einzige Lösung, die ich gefunden habe noch ist Resident-Einheit ohne Verlängerung einreicht ersten und danach ein ResidentExtension Erstellung mit der Einstellung Fremdschlüssel (ResidentID) und fügt es dem Kontext hinzu und reicht es erneut ein. Aber so hat es früher nicht funktioniert.
Weiß jemand, wie man diese Arbeit wieder auf die alte Art und Weise machen kann?
Jan, hast du dieses Problem jemals so gelöst, wie du es haben wolltest? –
Leider nicht. Ich benutze immer noch die Lösung, die im letzten Teil meiner Frage gefunden wird; ( – JanW