[英]When using, VS2013, Entity Framework 6 and WebAPI 2, is using a generic repository and UoW framework overkill?
我正在重新審視我的通用工作單元和存儲庫框架的實現 。
我正在使用EF6和VS2013。 因此,VS包含WebAPI控制器模板,這些模板使用動作自動生成WebAPI 2 OData Controller,使用如下的實體框架代碼:
// GET odata/UserProjects(5)/WebsiteRequiredKeywords
[Queryable]
public IQueryable<WebsiteRequiredKeyword> GetWebsiteRequiredKeywords([FromODataUri] int key)
{
return _db.Websites.Where(m => m.WebsiteId == key).SelectMany(m => m.WebsiteRequiredKeywords);
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
_db.Dispose();
}
base.Dispose(disposing);
}
private bool WebsiteExists(int key)
{ . . .
在示例代碼中查看CustomerController類 - 它們對VS2013模板中自動生成的代碼看起來非常熟悉。 如果我使用通用框架,我將不得不重構自動生成的代碼以使用通用存儲庫語法,修改構造函數等。雖然我確信有一種方法可以修改模板生成過程以符合到這個通用存儲庫(或將我們自己的模板添加到VS模板) - 這項工作似乎是不必要的。
通用腳手架模板使用相同的數據庫上下文。 據我了解,這是一個工作單元的代名詞。
我現在試圖找到必須執行任何這些額外工作的價值。 雖然我已經成功地使用了以前項目中的通用存儲庫和工作單元模式,但對於新項目來說,它只是更多的工作而不是它的價值(因為有一些概念重復b / t EF和這種模式)?
- 更新 -
通過對自動生成的代碼進行一些小的修改,在實現這樣的事情之后我還需要做些什么:
public class ProjectEditorController : ODataController
{
//private MyDatabaseNameContext db = new MyDatabaseNameContext(); // auto-generated code
private DbContext _db;
public ProjectEditorController(DbContext dbContext)
{
_db = dbContext;
}
. . .
這段代碼的問題在於現在沒有具體的上下文,並且做了類似的事情:
return SingleResult.Create(_db.Websites.Where(website => website.WebsiteId == key));
......不起作用,因為db
和實體之間沒有具體的聯系,即。 Websites
。
在為WebAPI控制器使用DI時 ,您仍然需要定義存儲庫。 這是一個案例,如果我想注入dbContext我需要使用通用倉庫嗎?
簡而言之,這是准確的:如果您想有效地使用依賴注入,那么您需要一個通用的存儲庫。 否則,您需要為所有EF實體定義存儲庫接口,除非您使用IDependency解析程序,如本文末尾所示 。
艾恩德在這里總結得很好。 不要添加你不需要的抽象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.