0

当我从 MVC 5 的列表中提交对象时出现此错误,并且它总是发生在列表的第二项中

我用它来调用数据库方法;

foreach (var modulo in _Modulos)
{
    USERS_MODULO _modulo = new USERS_MODULO();
    _modulo = modulo;
    _modulo.USUARIO = usuario;
    _PermissoesLinxDB.SalvaModulosUser(_modulo);
    _modulo = null; 
}

第 86 行:{ 第 87 行:DBRetaguardDataContext dbRetaguard = new DBRetaguardDataContext(); 第 88 行:
dbRetaguard.USERS_MODULOs.InsertOnSubmit(modulo); 第 89 行:
尝试第 90 行:{

源文件:c:\SOURCESAFE\Projetos\EMS\EMS.Dados\Controles\PermissoesLinxDB.cs
行:88

堆栈跟踪:

[NotSupportedException:尝试附加或添加一个不是新的实体,可能是从另一个 DataContext 加载的。这不受支持。]
System.Data.Linq.StandardChangeTracker.Track(MetaType mt, Object obj, Dictionary 1.InsertOnSubmit(TEntity entity) +1722 visited, Boolean recurse, Int32 level) +891018
System.Data.Linq.StandardChangeTracker.Track(Object obj, Boolean recurse) +83 System.Data.Linq.StandardChangeTracker.Track(Object obj) +12 System.Data.Linq.Table

4

1 回答 1

0

问题是_modulo并且modulo是相同的对象。两个变量都引用同一个对象。

您现在所做_modulo = modulo;的不是复制modulo到新对象,而是将引用设置_modulomodulo. 参考是平等的。

然后,当您调用_PermissoesLinxDB.SalvaModulosUser(_modulo);它时,它实际上是在尝试保存(?)已经存在的对象,modulo并因为它已经存在而引发异常。

我认为您打算做的事情类似于以下内容:1)创建一个新对象,2)将另一个对象的内部值分配给它,最后 3)保存新对象:

USERS_MODULO _modulo = new USERS_MODULO();
// assign each property from the old object to this brand new object
_modulo.PropertyA = modulo.PropertyA; // obviously, substitute your property names
_modulo.PropertyB = modulo.PropertyB;
_modulo.PropertyC = modulo.PropertyC;
// etc..
于 2014-03-08T20:18:16.193 回答