Recientemente hemos actualizado nuestro software a .NET 4.0 y EF 4.0 (sin entidades de auto-seguimiento) (anteriormente .NET 3.5 SP1). Ahora se plantea una nueva excepción en el código de trabajo anterior, que no entendemos.EntityFramework 4.0: InvalidOperationExeception: restricción de multiplicidad violada
Tenemos una entidad llamada Residente, y otra entidad llamada ResidentExtension, que amplía la entidad residente ya de por sí con una relación de 1 a (0/1). El siguiente código C# genera una nueva entidad en nuestra aplicación:
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 siguiente excepción se lanza directamente después de esta declaración:
multiplicidad restricción violada. El rol 'ResidentExtensions' de la relación VOCURA.EntityDataModels.EvocuraCarehomeManagementEntityModel.FK_ResidentExtensions_Residents 'tiene multiplicidad 1 o 0..1.
Ocurre en la incubadora del código generado:
[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;
}
}
La única solución que he encontrado todavía no ha presentado la entidad residente sin extensión en primer lugar, y después de esto, la creación de un ResidentExtension con el establecimiento de la clave externa (ResidentID) y agregarlo al contexto y enviar de nuevo. Pero esta no es la forma en que funcionó antes.
¿Alguien sabe cómo hacer que esto funcione a la vieja usanza otra vez?
Jan, ¿Alguna vez resolvió este problema de la forma en que quería que funcionara? –
Desafortunadamente no. Aún utilizando la solución que se encuentra en la última parte de mi pregunta; ( – JanW