简体   繁体   English

尝试保存在数据库中时 System.InvalidOperationException

[英]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.

相关问题 尝试连接到SQL Server中的本地数据库时,ServerVersion抛出“ System.InvalidOperationException” - ServerVersion throws 'System.InvalidOperationException' when trying to connect to local database in SQL Server 尝试foreach遍历列表时获取System.InvalidOperationException吗? - Getting System.InvalidOperationException when Trying to foreach loop over a List? 尝试打开和OLE DB连接时获取“ System.InvalidOperationException” - Getting “System.InvalidOperationException” When trying to open and OLE DB connection 尝试运行 web 应用程序时出现 System.InvalidOperationException - I get System.InvalidOperationException when trying to run the web app System.InvalidOperationException:将数据保存到我的数据库时 - System.InvalidOperationException: when saving data to my database 无法连接到数据库,获取System.InvalidOperationException - Cannot connect to database, getting System.InvalidOperationException 调用WCF服务时出现System.InvalidOperationException - System.InvalidOperationException when calling WCF Service 尝试 .ThenInculde 时出现 System.InvalidOperationException - System.InvalidOperationException when attempting `.ThenInculde` 填充数组时出现System.InvalidOperationException错误 - System.InvalidOperationException error when populating an array System.InvalidOperationException:提交消息时 - System.InvalidOperationException: When submitting a message
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM