深入了解实体框架和存储库,以便进行更好的测试。想知道这是否明智吗?
public interface IRepository
{
int SaveChanges();
void Dispose();
}
using (MyContext context = new MyContext())
{
TransactionRepository txns = new TransactionRepository(context); // TransactionRepository implement IRepository
MappingRepository maps = new MappingRepository(context); // MappingRepositoryimplement IRepository
SomeCommand command = new SomeCommand(txns, maps);
command.Execute();
}
每个存储库在逻辑上都是不同的,因此理论上可以位于不同的数据源中。目前,他们使用相同的数据库。每个存储库类都实现IRepository,尤其是SaveChanges()以及一些为简洁起见而未显示的查询方法。
利用多个存储库的最佳实践是什么?
最佳答案
这实际上取决于您的设计决策。如果您遵循“工作单位”模式,那么每个存储库可能都将拥有自己的上下文。主要是因为根据UoW,每个存储库调用都应该创建它的上下文,执行它的工作,然后处置它的上下文。
共享上下文还有其他一些很好的理由,其中之一(IMHO)是上下文必须跟踪实体的状态,如果您要获得实体,请放置上下文,对实体进行一些修改,以及然后将其附加到新上下文中,则该新上下文必须进入数据库,以便它可以确定实体的状态。同样,如果您使用的是实体图(发票及其所有InvoiceItems),则新上下文将必须获取图中的所有实体以确定其状态。
现在,如果您正在使用的网页或服务不处于或无法维持状态,则暗示UoW模式,这是一种普遍接受的“良好做法”。
关于c# - 在多个存储库中使用相同的DbContext是否明智?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14616211/