2016-11-11 3 views
0

私のコントローラから関数を呼び出しています。C#、EntityFrameworkの別のクラスファイルにコンテキストが追加されているときにSaveChangesが機能しない

biz.AddActivityLog(Param1, Param2); 

この関数は別のクラスファイル内にあります。

私は関数から受け取ったパラメータの助けを借りて新しいオブジェクトを作成しています。

次に、新しく作成したオブジェクトをコンテキストに追加します。

context.MyObject.Add(Obj); 

ここではcontext.SaveChanges();を使用していません。

コントローラ内でのみSaveChangesを実行します。

しかし、関数内のコンテキストに追加したオブジェクトは保存されません。

機能を使用せずに同じコードを試してみましたが(コントローラ自体の中に新しいオブジェクトが作成されました)、そのコードは保存されました。なぜ私はそれを別のクラスのコンテキストに追加して、コントローラからSavechangesを実行できないのですか?

助けてください。

+0

クラスのコンテキストオブジェクトをコントローラに渡しますか?いくつかのコードが非常に役立つでしょう – chrsi

答えて

1

オブジェクトをコンテキストに追加すると、その変更はコンテキストオブジェクトによって追跡されます。 SaveChangesメソッドを決して実行しないと、コンテキストオブジェクトが破棄されるポイントでそれらの変更が失われます。

コントローラに新しいコンテキストを作成するときに、新しいインスタンスが作成され、その中に変更されたデータはありません。 (シングルトンとして実装されていません)

コントローラにコンテキストを渡すか、変更するクラス内のコンテキストを安全にする必要があります。 しかし、コントローラにコンテキストを渡すことは、mvcコードとefコードが混在するため、Single Responsibility Principle(SRP)に違反するため、実際には悪い方法です。後で他の永続性フレームワークに切り替えることにした場合は、クラスを使用したすべてのコントローラを変更する必要があります。

関連する問題