上下文是通过引用传递的

时间:2013-07-08 19:10:44

标签: entity-framework

您好我找到了包含此代码的tutorial

var context=new ApplicationContext();
var userRepo=new Repository<User>(context);
var user =new User()
                    {
                      Username = "TestName"
                    };
userRepo.Add(user);
context.SaveChanges(); 

userRepo有一个名为_context的私有变量,因此调用context.SaveChanges()意味着上下文是通过Repository构造函数中的引用传递的吗?为什么我们不公开_context然后调用userRepo._context.SaveChanges()

1 个答案:

答案 0 :(得分:0)

是的,它是通过引用传递的。 ApplicationContextclass,C#中的每个类变量都通过引用传递给方法。

调用context.SaveChanges可以更清楚地表明提交的整个工作单元可能跨越多个存储库,而不仅仅是一个存储库。

例如,您可以创建第二个存储库var roleRepo=new Repository<Role>(context);并执行一些操作,例如添加新的Rolecontext.SaveChanges将提交所有更改,并在单个事务中插入添加的用户和添加的角色。使用userRepo._context.SaveChanges()(技术上可以使用公共_context并且将完全相同)可能会导致错误的想法,即只保存在用户存储库中完成的更改。但事实上,所有通过context传递的存储库所做的更改都会被保存。