2011-07-07 14 views
3

私はこの例外に直面していますAn attempt has been made to Attach or Add an entity that is not new, perhaps having been loaded from another DataContext. This is not supportedです。新しいエンティティを従業員テーブル(マスターテーブル)に挿入しようとしたときに発生します。InsertOnSubmit()を使用して新しいEmployeeエンティティを挿入できません

マスターEmployeesテーブルと詳細Ordersテーブルの間には関係があります。これらの2つのテーブル(特にEmployee.Orders EntitySet)の関係は、問題の原因であると確信しています。リレーションシップでは、問題なくEmployeesテーブルに挿入されます。

私は問題で検索すると、私が実装しようとしましたが、私の場合は、これらの項目でブログの記事内の1つとは異なっているthis blog postがあった:

  • 試行を更新するとき、彼は例外に直面しているが(挿入しようとしている間)。
  • テーブルのアーキテクチャは異なります。

どうすればこの問題を解決できますか?私のDataContextは、私のリポジトリ内のクラスレベルで定義されていると私はdc.SubmitChanges();を呼び出すときに例外がスローされます。

Employee emp = new Employee(); 
emp.Name = empName; // empName is a local variable 

// What should I default emp.Orders to? 

dc.Employees.InsertOnSubmit(emp); 
dc.SubmitChanges(); 

P.S:

は、ここで挿入コードです。そして私はしなかったアタッチそれはなぜそれを言うのですか?ここで

+0

私はこの質問に答えるためにマーケティングキャンペーンを行うべきですか?私はそうだ、何かが間違っていることを意味する。 –

+0

ソリューションに複数のDatacontextファイルがありますか? – Magnus

+0

DataContextファイル?私はあなたが* .dbmlファイルを意味すると思う、いいえ、私は1つしかありません。 –

答えて

1

あなたは着脱方法を使って何をする必要があるかを説明する記事です: http://www.codeproject.com/KB/linq/linq-to-sql-detach.aspx

+0

+1ありがとうございます。私はそれを確認し、何をすべきか見てみましょう。 –

+0

まあ、それは私の問題とコンパイルエラーの完全な例のソースコードを解決しませんでした。 –

0

私はそれだけで従業員オブジェクト以外の何かを保存しようとしている推測していたり​​、私たち表示されませんあなたのリポジトリのフルコード。 DataContextオブジェクト(dc)をインスタンス化するとき、DeferredLoadingEnabled = falseおよびObjectTrackingEnabled = falseを設定して、動作するかどうかを確認してください。そうであれば、SQL Server ProfilerのSQLコードを見て、メッセージのように別のコンテキストから来た可能性のある他のオブジェクトを修正しているかどうか確認してください。

var dc = new MyDataContext() 
{ 
    DeferredLoadingEnabled = false, 
    ObjectTrackingEnabled = false 
}; 
0

私のベットはプライマリキーです。

  • プライマリキーもauto incrementに設定されていますか?
  • 名前を変更しようとしましたか?
  • DBからすべての行 を削除するとどうなりますか?あなたはそれを挿入できますか?
関連する問題