0

嗨,我找到了包含此代码的教程。

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()

4

1 回答 1

0

是的,它是通过引用传递的。ApplicationContext是一个class并且 C# 中的每个类变量都通过引用传递给一个方法。

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

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

于 2013-07-08T19:43:03.583 回答