我正在學習MVC和EF,我經常在關於這些主題的文章中看到控制器通過Repository對象處理數據,而不是直接使用LINQ to Entities。在使用實體框架時是否真的需要實現存儲庫?
我創建了一個小型web應用程序來測試一些想法。它聲明如下界面作爲數據存儲
public interface ITinyShopDataService
{
IQueryable<Category> Categories { get; }
IQueryable<Product> Products { get; }
}
的抽象然後我具有從生成的類TinyShopDataContext(從ObjectContext的繼承)繼承並實現ITinyShopDataService的類。
public class TinyShopDataService : TinyShopDataContext, ITinyShopDataService
{
public new IQueryable<Product> Products
{
get { return base.Products; }
}
public new IQueryable<Category> Categories
{
get { return base.Categories; }
}
}
最後,控制器使用ITinyShopDataService的實現來獲取數據,例如,用於顯示特定類別的產品。
public class HomeController : Controller
{
private ITinyShopDataService _dataService;
public HomeController(ITinyShopDataService dataService)
{
_dataService = dataService;
}
public ViewResult ProductList(int categoryId)
{
var category = _dataService.Categories.First(c => c.Id == categoryId);
var products = category.Products.ToList();
return View(products);
}
}
我覺得上面的控制器具有一些積極的屬性。
- 由於數據服務被注入,它很容易測試。
- 它使用以實現中立的方式查詢抽象數據存儲的LINQ語句。
所以,我沒有看到在控制器和ObjectContext派生類之間添加Repository的好處。我錯過了什麼? (對不起,第一篇文章有點太長)
好吧,我剝去一切非必要的,只剩下這些線條說明了如果我創建了一個存儲庫,它將只包含單線或雙線方法,這些方法幾乎不會增加任何顯着價值。 – 2010-09-23 13:40:22
啊,現在我明白你在說什麼了。你只是從DBContext中提取一個接口,而不是使用存儲庫來包裝它。 – 2010-09-23 13:54:26