He configurado una relación de 1-a-1 utilizando el código EF primera siguiendo el método prescrito aquí:Excepción causante de la relación 1 a 1: AssociationSet está en estado 'Eliminado'. Teniendo en cuenta las restricciones de multiplicidad
Unidirectional One-To-One relationship in Entity Framework
Mi mapeo se parece a esto ...
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Asset>()
.HasRequired(i => i.NewsItem)
.WithOptional(e => e.Asset)
.Map(m => m.MapKey("NewsItemId"));
}
Pero cuando obtengo esta excepción ...
Una relación del conjunto de asociaciones 'Asset_NewsItem' está en estado 'Eliminado'. Dadas las restricciones de multiplicidad, un 'Asset_NewsItem_Source' correspondiente también debe estar en el estado 'Eliminado'.
Cada vez que se ejecuta este código:
var entry = _db.NewsItems.Find(id);
entry.Asset = new Asset();
_db.DbContext.SaveChanges();
puedo conseguir que las cosas funcionen si puedo marcar explícitamente al Activo anterior asociado al elemento Novedades para su eliminación, pero parece un poco torcidas. Parece que, basado en el mapeo, el código anterior simplemente debería funcionar ... reemplazando el antiguo activo por el nuevo.
¿Estoy haciendo algo mal? ¿Hay algo que deba especificar en el mapeo que hará que las cosas funcionen bien? O, ¿es simplemente la manera EF de tener que eliminar y luego agregar objetos asociados como este?
No parece muy ORM'ish, pero entiendo lo que dices. ¿Hay una mejor manera de mapear la relación que permitiría simplemente establecer el nuevo activo? O, por desgracia, el mapeo es correcto y solo tengo que lidiar con él: :) Gracias. – wgpubs
Me encontré con lo mismo. Muy frustrante. Creo que NHibernate maneja esto como debería ser manejado. –
@MikeCole: ¿y cómo se debe manejar? –