【发布时间】:2016-05-17 12:09:00
【问题描述】:
我知道有很多关于这个主题的文章,但是无论我在哪里看,对我来说要么太复杂要么不清楚。
我的团队首先开发使用实体框架代码的 Web 应用程序。我们还使用 Autofac 进行依赖注入。
目前,数据访问如下:
提供给不包含 EF 的项目的 API:
public class DataService
{
private IDbContextFactory<MyContext> _factory;
private IDataServiceExecutor _dataServiceExecutor;
public DataService(IDbContextFactory<MyContext> factory, IDataServiceExecutor executor)
{
_factory = factory;
_dataServiceExecutor = executor;
}
public void AddItem(Product prod)
{
using (var context = _factory.Create())
{
if (_dataServiceExecutor.AddItem(context, prod))
context.SaveChanges();
}
}
}
我的 DataServiceExecutor:
public class DataServiceExecutor
{
private IRepository<Product> _products;
public DataService(IRepository<Product> products...more repositories)
{
_products = products;
}
public bool AddItem(DbContext context, Prouduct prod)
{
try
{
_products.AddItem(context, prod);
return true;
}
catch(Exception ex)
{
Log(..)
return false;
}
}
}
我所有的存储库都继承自这个抽象存储库:
public abstract class EFRepository<T> : IRepository<T>
{
public void AddItem<T>(DbContext context, T item)
{
context.Set<T>().Add(item);
}
.
.
.
}
好处是每个事务都以这种方式使用上下文。
不好的是我的服务方法和我的存储库方法都直接获取上下文。应用程序不是很大,所以现在上下文的方法注入很好,但它可能会变得更大,所以在我看来,当前状态下的上下文注入是有问题的。而且看起来很糟糕。
也许还有更多我不知道的利弊..
有什么我不熟悉的方法可以更好地访问数据?
【问题讨论】:
-
你最好在codereview.stackexchange.com问这个问题
标签: c# entity-framework ef-code-first dbcontext