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.
Otra solución podría ser que necesitemos configurar datos de enlace de dos vías porque MyEntity necesita Group y Group tiene MyEntity. Puede consultar este enlace para configurar el enlace de dos vías. Espero eso ayude. Código de EF 5.0 Primero Navegación bidireccional sin identificación de clave foránea en niños