我知道有很多關於這個話題的文章,但是無論我在哪裏看,它對我來說都不是太複雜或不清楚。EF - 管理DbContext的最佳方法?
我的團隊首先開發使用Entity框架代碼的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);
}
.
.
.
}
好事是這樣每個事務使用一個上下文。
不好的一面是我的服務方法和我的存儲庫方法都直接使用上下文。應用程序不是那麼大,所以現在方法注入上下文很好,但它可能會變得更大,所以在我看來,注入當前狀態的上下文是有問題的。它看起來很糟糕。
也許還有更多的優點和缺點,我是不知道的..
有什麼辦法,我不熟悉,使數據訪問更好?
你可能有更好的運氣,詢問在http://codereview.stackexchange.com/ – Brandon