0

MVC 5 のリストからオブジェクトを送信しようとすると、このエラーが発生しました。リストの 2 番目の項目で常に発生しています。

これを使用してデータベース メソッドを呼び出します。

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: 新しくないエンティティをアタッチまたは追加しようとしました。別の 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

問題は、_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..
于 2014-03-08T20:18:16.193 に答える