我正从我的控制器调用一个函数。
biz.AddActivityLog(Param1, Param2);
此函数位于另一个类文件中。
在该函数内部,我借助于从函数中收到的参数创建了一个新对象。
然后我将新创建的对象添加到上下文中。
context.MyObject.Add(Obj);
但我在这里没有使用context.SaveChanges();
。
我只在控制器内执行SaveChanges。
但是我在函数中添加到Context中的Object没有被保存。
当我在不使用该函数的情况下尝试相同的代码时 - (在我的控制器本身内创建了我的新对象),它被保存了。为什么我不能将它添加到另一个类的上下文中并从我的控制器执行Savechanges?
请帮忙。
答案 0 :(得分:1)
如果将对象添加到上下文中,则上下文对象将跟踪其更改。如果您从未执行SaveChanges方法,那么这些更改会在上下文对象被销毁的位置丢失。
在控制器中创建新上下文时,会创建一个新的实例,而不会在其中更改任何数据。 (它没有作为单身实现)
您必须将上下文传递给Controller,或者保护您更改它的类中的上下文。 但是将上下文传递给Controller是一个非常糟糕的做法,因为它违反了单一责任原则(SRP),因为它混合了mvc代码和ef代码。如果您以后决定切换到另一个持久性框架,则必须更改使用该类的每个控制器。