[解決済み] [Entity Framework 4.1でエンティティに関連オブジェクトを追加する際に、エンティティオブジェクトをIEntityChangeTracker.の複数のインスタンスから参照できない。
質問
従業員の詳細を保存しようとしていますが、その従業員には都市への参照があります。しかし、検証済みの連絡先を保存しようとすると、毎回例外が発生します。 "ADO.Net Entity Framework An entity object cannot be referenced by multiple instances of IEntityChangeTracker"
多くの投稿を読みましたが、まだ何をすべきかの正確なアイデアが得られていません...。 私の保存ボタンをクリックするコードは次のとおりです。
protected void Button1_Click(object sender, EventArgs e)
{
EmployeeService es = new EmployeeService();
CityService cs = new CityService();
DateTime dt = new DateTime(2008, 12, 12);
Payroll.Entities.Employee e1 = new Payroll.Entities.Employee();
Payroll.Entities.City city1 = cs.SelectCity(Convert.ToInt64(cmbCity.SelectedItem.Value));
e1.Name = "Archana";
e1.Title = "aaaa";
e1.BirthDate = dt;
e1.Gender = "F";
e1.HireDate = dt;
e1.MaritalStatus = "M";
e1.City = city1;
es.AddEmpoyee(e1,city1);
}
そして 従業員サービスコード
public string AddEmpoyee(Payroll.Entities.Employee e1, Payroll.Entities.City c1)
{
Payroll_DAO1 payrollDAO = new Payroll_DAO1();
payrollDAO.AddToEmployee(e1); //Here I am getting Error..
payrollDAO.SaveChanges();
return "SUCCESS";
}
解決方法は?
なぜなら、この2行は ...
EmployeeService es = new EmployeeService();
CityService cs = new CityService();
...はコンストラクタでパラメータを取らないので、クラス内でコンテキストを作成しているのでしょう。を読み込むと
city1
...
Payroll.Entities.City city1 = cs.SelectCity(...);
...あなたは
city1
でコンテキストに
CityService
. 後で
city1
への参照として、新しい
Employee
e1
を追加し
e1
への参照を含む。
city1
にあるコンテキストに
EmployeeService
. その結果、あなたは
city1
が 2 つの異なるコンテキストにアタッチされているため、例外が発生するのです。
サービスクラスの外部でコンテキストを作成し、それを両方のサービスに注入して使用することで、これを修正できます。
EmployeeService es = new EmployeeService(context);
CityService cs = new CityService(context); // same context instance
あなたのサービスクラスは、単一のエンティティタイプにのみ責任を負うリポジトリに少し似ています。このような場合、サービスに個別のコンテキストを使用すると、エンティティ間のリレーションシップが関与した時点で、常に問題が発生します。
また、密接に関連するエンティティのセットを担当する1つのサービスを作成することもできます。
EmployeeCityService
(これは単一のコンテキストを持ちます) そして、全体の操作をあなたの
Button1_Click
メソッドをこのサービスのメソッドに渡す。
関連
-
[解決済み】C#におけるtypedefの等価性
-
[解決済み】バックスラッシュを含むパス文字列のエスケープシーケンスが認識されない件
-
[解決済み] 'IEnumerable<SelectListItem>' 型の ViewData アイテムで、キーが国であるものは存在しない。
-
[解決済み】Visual Studio: 操作を完了できませんでした。パラメータが正しくありません
-
[解決済み】ランダムなブーリアンを生成する最速の方法
-
[解決済み】Linq 構文 - 複数列の選択
-
[解決済み】画像のペイントにTextureBrushを使用する方法
-
[解決済み] Entity Framework - 複数レベルのプロパティを含める
-
[解決済み] Entity Frameworkで複数行を削除する方法(foreachを使用しない)
-
[解決済み】Entity Framework 4.1 Code Firstでクラスプロパティを無視する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 保護レベルによりアクセス不能になりました。
-
[解決済み】取り消せないメンバはメソッドのように使えない?
-
[解決済み] 'IEnumerable<SelectListItem>' 型の ViewData アイテムで、キーが国であるものは存在しない。
-
[解決済み】Swashbuckle/Swagger + ASP.Net Core: "Failed to load API definition" (API定義の読み込みに失敗しました
-
[解決済み】Entity FrameworkからのSqlException - セッション内で他のスレッドが動作しているため、新しいトランザクションは許可されません。
-
[解決済み】Visual Studio: 操作を完了できませんでした。パラメータが正しくありません
-
[解決済み】IntPtrとは一体何なのか?
-
[解決済み】「namespace」なのに「type」のように使われる。
-
[解決済み】ファイルやアセンブリ、またはその依存関係の1つをロードできませんでした。
-
[解決済み】Microsoft.Extensions.LoggingからILoggerを解決することができない