【问题标题】:Error when Submitting a list of an objective提交目标列表时出错
【发布时间】:2014-03-08 19:40:49
【问题描述】:

当我从 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(模数);第 89 行:
尝试第 90 行:{

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

堆栈跟踪:

[NotSupportedException: 已尝试附加或添加 不是新的实体,可能是从另一个实体加载的 数据上下文。这不受支持。]
System.Data.Linq.StandardChangeTracker.Track(元类型 mt,对象 obj, Dictionary2 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
1.InsertOnSubmit(TEntity 实体) +172

【问题讨论】:

    标签: c# asp.net-mvc linq-to-sql asp.net-mvc-5 submitchanges


    【解决方案1】:

    问题在于_modulomodulo 是同一个对象。两个变量都引用同一个对象。

    您现在对_modulo = modulo; 所做的不是将modulo 复制到新对象,而是将_modulo 的引用设置为与modulo 完全相同的内存点。引用是相等的。

    然后,当您调用 _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..
    

    【讨论】:

      猜你喜欢
      • 2018-05-10
      • 1970-01-01
      • 1970-01-01
      • 2013-01-14
      • 2012-03-22
      • 1970-01-01
      • 1970-01-01
      • 2017-01-23
      • 1970-01-01
      相关资源
      最近更新 更多