[英]System.InvalidOperationException when trying to save in database
I'm working with Entity Framework using a Oracle database.我正在使用 Oracle 数据库处理实体框架。 What I'm trying to do is to save a new Entity using a old entity as base.
我想要做的是使用旧实体作为基础保存新实体。 I take all the properties of the old entity and take them to a new one, this with the objective of avoid problems with duplication of entities or multiple references.
我将旧实体的所有属性都带到一个新实体中,目的是避免实体重复或多个引用的问题。
I'm doing something like this:我正在做这样的事情:
List < PPL_FAMILIAR_RESPONSABLE > familiares = new List < PPL_FAMILIAR_RESPONSABLE > ();
foreach(PPL_FAMILIAR_RESPONSABLE fr in registro.PPL_FAMILIAR_RESPONSABLE) {
familiares.Add(new PPL_FAMILIAR_RESPONSABLE {
FR_NOMBRE = fr.FR_NOMBRE,
FR_APPATERNO = fr.FR_APPATERNO,
FR_APMATERNO = fr.FR_APMATERNO,
PARENTESCO = fr.PARENTESCO,
COLONIA = fr.COLONIA,
CALLE = fr.CALLE,
FR_SEXO = fr.FR_SEXO,
NUMERO_EXT = fr.NUMERO_EXT,
NUMERO_INT = fr.NUMERO_INT
});
}
List < PPL_ALIAS > alias = new List < PPL_ALIAS > ();
foreach(PPL_ALIAS a in registro.PPL_ALIAS) {
alias.Add(new PPL_ALIAS {
NOMBRE_ALIAS = a.NOMBRE_ALIAS,
APPATERNO_ALIAS = a.APPATERNO_ALIAS,
APMATERNO_ALIAS = a.APMATERNO_ALIAS
});
}
List < PPL_APODO > apodos = new List < PPL_APODO > ();
foreach(PPL_APODO a in registro.PPL_APODO) {
apodos.Add(new PPL_APODO {
APODO = a.APODO,
});
}
List < PPL_PANDILLA > pandillas = new List < PPL_PANDILLA > ();
foreach(PPL_PANDILLA p in registro.PPL_PANDILLA) {
pandillas.Add(new PPL_PANDILLA {
NOTAS = p.NOTAS,
CAT_PANDILLA = p.CAT_PANDILLA,
});
}
List < PPL_RELACIONES_PERSONALES > relaciones = new List < PPL_RELACIONES_PERSONALES > ();
foreach(PPL_RELACIONES_PERSONALES rp in registro.PPL_RELACIONES_PERSONALES) {
relaciones.Add(new PPL_RELACIONES_PERSONALES {
RP_NOMBRE = rp.RP_NOMBRE,
RP_APMATERNO = rp.RP_APMATERNO,
RP_APPATERNO = rp.RP_APPATERNO,
PARENTESCO = rp.PARENTESCO,
NOTAS = rp.NOTAS
});
}
List < PPL_PERTENENCIAS > pertenencias = new List < PPL_PERTENENCIAS > ();
foreach(PPL_PERTENENCIAS p in registro.PPL_PERTENENCIAS) {
pertenencias.Add(new PPL_PERTENENCIAS {
PERTENENCIA = p.PERTENENCIA,
DESCRIPCION = p.DESCRIPCION
});
}
PPL_REGISTRO r = new PPL_REGISTRO {
AUTORIDAD_DISPOSICION = registro.AUTORIDAD_DISPOSICION,
AUTORIDAD_INTERNADO = registro.AUTORIDAD_INTERNADO,
CLASIFICACION = registro.CLASIFICACION,
EDIFICIO = registro.EDIFICIO,
ESTATUS_ADMINISTRATIVOS = registro.ESTATUS_ADMINISTRATIVOS,
FECHA_INGRESO = registro.FECHA_INGRESO,
FECHA_REGISTRO = registro.FECHA_REGISTRO,
NUM_OFICIO = registro.NUM_OFICIO,
TIPO_INGRESO = registro.TIPO_INGRESO,
TIPO_SEGURIDAD = registro.TIPO_SEGURIDAD,
UBICACION = registro.UBICACION,
DELITO = registro.DELITO,
PPL_DATOS_GENERALES = registro.PPL_DATOS_GENERALES,
PPL_PERTENENCIAS = pertenencias,
PPL_ALIAS = alias,
PPL_APODO = apodos,
PPL_FAMILIAR_RESPONSABLE = familiares,
PPL_RELACIONES_PERSONALES = relaciones,
PPL_MEDIA_FILIACION = registro.PPL_MEDIA_FILIACION,
PPL_PANDILLA = pandillas
};
using(var bl = new BLRegistroPPL()) {
bl.CrearRegistroPPL(r);
}
As you can see I use the entity registro
as base to create a new PPL_REGISTRO
entity.如您所见,我使用实体
registro
作为基础来创建新的PPL_REGISTRO
实体。 I take all the values of registro and pass them to a new Entity, and with the relationships I iterate over them and create a new list with complete new objects, and assign them to the new PPL_REGISTRO entity I'm creating.我获取 registro 的所有值并将它们传递给一个新实体,并根据关系迭代它们并创建一个包含完整新对象的新列表,并将它们分配给我正在创建的新 PPL_REGISTRO 实体。 After that I want to save the new entity in the database using the
CrearRegistroPPL
method to save it:之后,我想使用
CrearRegistroPPL
方法将新实体保存在数据库中以保存它:
public void CrearRegistroPPL(PPL_REGISTRO registroPPL) {
context.PPL_REGISTRO.Add(registroPPL);
context.SaveChanges();
}
But at the moment of save it, the app throw me the next error: System.InvalidOperationException: 'An entity object cannot be referenced by multiple instances of IEntityChangeTracker.'
但是在保存它的那一刻,应用程序向我抛出了下一个错误:
System.InvalidOperationException: 'An entity object cannot be referenced by multiple instances of IEntityChangeTracker.'
What this can be?这可以是什么?
The code you posted should not be the problem.您发布的代码应该不是问题。
multiple instances of IEntityChangeTracker
IEntityChangeTracker 的多个实例
points to another problem.指向另一个问题。
Most probably there is another active entity framework db context and some entity is tracked by both of them.很可能还有另一个活动实体框架 db 上下文,并且它们两个都跟踪了某些实体。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.