【发布时间】:2010-06-22 23:29:49
【问题描述】:
我已经开始研究我正在做的一个项目的实体框架,并且正在通过存储库模式对它使用 BLL。据我了解,我应该为每个实体创建一个存储库,这样我就有了
public class UserRepository : IRepository<User>
{ ... }
和
public class AccountRepository : IRepository<Account>
{ ... }
在我看到的示例中,常见的做法是在 using 语句中创建实体上下文并在其中执行获取、更新和保存等操作。
using(var ctx = new AppEntities()
{
//do whatever
ctx.SaveChanges();
}
对于存储库的简单访问,这是可以的,但如果我想通过 BLL 在 2 个(或更多)存储库之间进行交互...
public void SaveSomethingMoreComplex()
{
//BLL here stuff like validation etc
_userRepository.GetSomeData();
_accountRepository.SaveSomeData(account);
_userRepository.SaveSomeMore(user);
// Probably should have one final save that affects both repositories???
// Should be in a transaction scope also?
}
最好为两个存储库使用相同的AppEntities 实例吗?
同样在这个例子中,最终保存可能应该在块的末尾,而不是像我的例子中的 2 和事务的一部分?
如果我确实使用了同一个实例,那么将其注入到存储库的构造函数中并让它在应用程序的生命周期中存在是否安全,或者是否有某些原因我看到的示例倾向于在一个单个方法调用?
感谢您提供的任何帮助。
【问题讨论】:
标签: c# entity-framework .net-3.5 repository-pattern