write tag moz img images how for example description alternative c# asp.net-mvc entity-framework entity-framework-4.1 ef-code-first

c# - moz - seo image alt tag example



Se han detectado cambios conflictivos en el rol x de la relaciĆ³n y (3)

El problema es este:

MyEntity tiene una ID de 0 ya que es una nueva MyEntity. El grupo también es nuevo y contiene una referencia a MyEntity.

Por lo tanto, MyEntity contiene una lista de grupos que contienen una referencia a MyEntity .

El problema es que MyEntity.Group.MyEntity parece ser "nuevo y no es lo mismo" que MyEntity . Al agregar MyEntity al contexto, se encontró un conflicto.

Para resolver el problema, establezco Group.MyEntity en NULL y mantengo la referencia de Group dentro de la lista de MyEntity . Al guardar, la referencia de MyEntity (ID) se establece en la tabla de grupos.

No estoy seguro de que sea la forma más limpia de hacerlo, pero el problema finalmente se resuelve.

Estoy teniendo la excepción

Se han detectado cambios conflictivos en el rol x de la relación y.

Cada vez que agrego mi entidad a mi contexto

Database.MyEntitys.Add(MyEntity);

La clase MyEntity contiene esta propiedad:

public virtual ICollection<DetailInfo> Group { get; set; }

La clase DetailInfo es bastante simple:

public class DetailInfo:BaseEntity { public virtual Detail Detail { get; set; } public decimal Total { get; set; } public virtual MyEntity MyEntity { get; set; } }

El DatabaseContext también es simple:

public class MyEntityConfiguration : EntityTypeConfiguration<MyEntity> { public MyEntityConfiguration() { HasMany(e => e.Group).WithRequired(s => s.MyEntity).WillCascadeOnDelete(true); } } public class DetailInfoConfiguration : EntityTypeConfiguration<DetailInfo> { public DetailInfoConfiguration() { HasRequired(x => x.MyEntity).WithMany(s => s.Group); HasRequired(x => x.Detail); HasKey(s => s.ID); ToTable("DetailInfo"); } }

En el lado de la base de datos, la tabla MyEntity tiene una clave principal para el ID de columna. La DetailInfo también tiene una clave principal llamada ID. DetailInfo contiene 2 FK, uno para MyEntity y otro para Detail, que es otra entidad.

En el escenario problemático, la MyEntity es nueva tiene un nuevo detalle. Estoy esperando una nueva entrada para MyEntity con un nuevo detalle y tener todos los FK configurados correctamente.

Editar:

Aquí está la inserción:

public virtual int Insert(MyEntity myEntity) { if (myEntity.Group != null && myEntity.Group.Count() == 0) { myEntity.Group = null; } if (myEntity.Group != null) { foreach (var g in myEntity.Group) { if (g.PropertyOneToOne != null) { if (g.PropertyOneToOne.ID == 0) { myEntity.PropertyOneToOne = null; } else { if (!Database.PropertyOneToOnes.Local.Any(e => e.ID == g.PropertyOneToOne.ID)) { Database.PropertyOneToOnes.Attach(g.PropertyOneToOne); } myEntity.PropertyOneToOne = Database.PropertyOneToOnes.Local.Single(e => e.ID == g.PropertyOneToOne.ID); } } else { myEntity.PropertyOneToOne = null; } } } Database.MyEntitys.Add(myEntity); }


El problema también podría ser que está creando una nueva lista secundaria y asignando esa lista a varios elementos de la lista principal, la solución es que debe crear una nueva lista secundaria para cada uno de los elementos principales.