我正在使用asp.net mvc-4 web应用程序,我正在使用实体框架5.0。现在我使用ado.net实体框架映射了我的数据库表,该框架生成了一个.edmx文件和DBContext类。
现在我不确定asp.net mvc如何处理以下情况: -
我有一个直接与数据库实体交互的存储库模型类,如下所示: -
smartdrag
此外,我还有以下Controller类,它启动上述存储库和另一个API存储库类,如下所示: -
public class Repository
{
private MyEntities my = new MyEntities();
public void Save()
{
my.SaveChanges();
}
APIRepositoty还启动了存储库,如下所示: -
public class ServerController : Controller
{
Repository repository = new Repository();
APIRepository APIrepository = new APIRepository();
//code goes here
Public ActionResult Create(Emp e)
{
//code goes here..
var result = APIreposioty.SendCall(...);
repository.Save();
}
所以现在在我的控制器类中我有以下内容: -
所以现在当我在action方法中调用repositoty.Save()时?它会将实体对象保存在存储库中吗?在API库中?或者用户会话将管理两个单独的上下文对象?他们互不干涉?
答案 0 :(得分:1)
您的控制器最终会创建实体上下文的不同实例。他们不受任何约束。保存其中一个只会保存已加载/注册为添加的实体。由另一个处理的实体将不会被保存。
对于您的情况,处理的常用模式是使用依赖注入。将其配置为仅为每个控制器实例化一个DBContext
,无论控制器使用多少个存储库(直接或通过其他依赖项)。