在C#,EntityFramework中的另一个类文件中添加上下文时,SaveChanges无效

时间:2016-11-11 12:41:39

标签: c# entity-framework savechanges

我正从我的控制器调用一个函数。

biz.AddActivityLog(Param1, Param2);

此函数位于另一个类文件中。

在该函数内部,我借助于从函数中收到的参数创建了一个新对象。

然后我将新创建的对象添加到上下文中。

context.MyObject.Add(Obj);

但我在这里没有使用context.SaveChanges();

我只在控制器内执行SaveChanges。

但是我在函数中添加到Context中的Object没有被保存。

当我在不使用该函数的情况下尝试相同的代码时 - (在我的控制器本身内创建了我的新对象),它被保存了。为什么我不能将它添加到另一个类的上下文中并从我的控制器执行Savechanges?

请帮忙。

1 个答案:

答案 0 :(得分:1)

如果将对象添加到上下文中,则上下文对象将跟踪其更改。如果您从未执行SaveChanges方法,那么这些更改会在上下文对象被销毁的位置丢失。

在控制器中创建新上下文时,会创建一个新的实例,而不会在其中更改任何数据。 (它没有作为单身实现)

您必须将上下文传递给Controller,或者保护您更改它的类中的上下文。 但是将上下文传递给Controller是一个非常糟糕的做法,因为它违反了单一责任原则(SRP),因为它混合了mvc代码和ef代码。如果您以后决定切换到另一个持久性框架,则必须更改使用该类的每个控制器。