我正在使用ASP.NET MVC 2和實體框架構建我的第一個Web應用程序。我正在使用存儲庫模式。從Stack Overflow和其他網站收集的信息看來,共識是每個域模型對象有一個控制器,每個聚合根對象有一個存儲庫。ASP.NET MVC /實體框架:通過聚合根存儲庫訪問聚合對象
我的問題是我應該如何通過聚合根存儲庫訪問非根集合對象。在我處理的例子中,有一個Customer模型和一個Boat模型。船隻只能以客戶的FK參考存在,而船隻只需在客戶環境中參考。這導致我相信我有這兩個對象的聚合,並且客戶是根。
現在在我的船控制器我有一個編輯操作方法:
public class BoatsController : Controller
{
private ICustomersRepository customersRepository;
public BoatsController(ICustomersRepository customersRepository)
{
this.customersRepository = customersRepository;
}
public JsonResult Edit(int id, FormCollection collection)
{
var boat = customersRepository.GetBoat(id);
// Update boat
}
}
我的問題是我怎麼想檢索信息庫中的船對象?
public class SQLCustomersRepository : ICustomersRepository
{
DatabaseEntities db = new DatabaseEntities();
public Boat GetBoat(int id)
{
return db.Boats.SingleOrDefault(x => x.ID == id);
// OR
return db.Customers.Where(x => x.Boats.Any(y => y.ID == id)
.Select(x => x.Boats.FirstOrDefault(y => y.ID == id);
}
}
可以接受我從客戶資料庫中引用db.Boats嗎?它似乎是最乾淨的,但這意味着我將不得不改變我的FakeCustomersRepository以獲得客戶和船的名單。
對我來說,通過db.Customers訪問船似乎更合理,但是我無法弄清楚如何返回一個單獨的船對象,而不必在LINQ查詢中重複我自己,因爲它並不適合我。
我知道我還有很多東西需要學習,所以希望你能指點我正確的方向!
謝謝!
感謝您的詳細回覆。因爲我是新手,所以我想確保我沒有違反一些基本規則或任何東西。 – 2010-08-07 16:44:33