Abbiamo recentemente aggiornato il nostro software in .NET 4.0 e EF 4.0 (senza entità di auto-tracciamento) (precedente .NET 3.5 SP1). Ora una nuova eccezione viene sollevata nel precedente codice di lavoro, che non capiamo.EntityFramework 4.0: InvalidOperationExeception: Violazione della molteplicità violata
Abbiamo un'entità chiamata Resident e un'altra entità denominata ResidentExtension, che estende l'entità residente già grande con una relazione da 1 a (0/1). Il seguente codice C# genera una nuova entità nella nostra applicazione:
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,
};
la seguente eccezione è direttamente sollevato dopo questa dichiarazione:
Molteplicità vincolo violato. Il ruolo 'ResidentExtensions' della relazione VOCURA.EntityDataModels.EvocuraCarehomeManagementEntityModel.FK_ResidentExtensions_Residents 'ha molteplicità 1 o 0..1.
Essa si verifica nel setter del codice generato:
[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;
}
}
L'unica soluzione che ho ancora trovato è quello di sottoporre l'entità residente senza estensione prima, e dopo questo, creando un ResidentExtension con l'impostazione della chiave esterna (ResidentID) e aggiungerla al contesto e inviare nuovamente. Ma questo non è il modo in cui ha funzionato prima.
Qualcuno sa come rendere questo lavoro alla vecchia maniera?
gen, hai mai risolto questo problema nel modo in cui volevi che funzionasse? –
Purtroppo no. Sempre usando la soluzione che si trova nell'ultima parte della mia domanda ( – JanW