我正在尝试将MVC4中两个存储库的数据组合在一起。我在我的Action函数中使用join语句来从两个表中收集信息。我将此数据传递给我的观点。我对如何正确组合来自两个存储库的数据感到困惑。一些帮助将不胜感激。谢谢!
在控制器中:
public IOwnerRepository OwnerDB;
public IDwellingRepository DwellingDB;
public OwnerController() : this(new OwnerRepository(), new DwellingRepository()) {}
public OwnerController(IOwnerRepository oRepository, IDwellingRepository dRepository)
{
OwnerDB = oRepository;
DwellingDB = dRepository;
}
动作:
public ActionResult Account(int id, int? activelink)
{
// Link values
// Account = 0
// Listings = 1
// Profile = 2
// Create Property = 3
// Check for a value
// If no value set to zero
if (!activelink.HasValue)
activelink = 0;
// ####ing hackers
if (activelink > 3)
activelink = 0;
ViewBag.ActiveLink = activelink.ToString();
switch (activelink)
{
case 0:
ViewBag.Title = "Account Details";
break;
case 1:
ViewBag.Title = "Listings";
break;
case 2:
ViewBag.Title = "Profile";
break;
case 3:
ViewBag.Title = "Create Property";
break;
}
var oOwner = OwnerDB.FindOne(GetUserId(), id);
if (oOwner == null)
{
return new FileNotFoundResult { Message = "No Account found for id " + id.ToString() };
}
else
{
return View(oOwner);
}
}
所有者存储库:
public Owner FindOne(string UserId, int id)
{
var dwelling = (from o in db.Owner
join d in db.Dwelling on o.ID equals d.Owner_ID into ps
from k in ps.DefaultIfEmpty()
select o );
var oOwner = (from p in dwelling
where p.ID == id
select p);
return oOwner.FirstOrDefault();
}
答案 0 :(得分:0)
您需要问自己的第一个问题是:我需要这两个存储库吗?
在您的域定义中是否使得两者都具有敏感性?没有Dwelling
Owner
是否有意义,反之亦然?
DDD最佳实践之一是每个聚合根限制一个存储库。看看这个SO question,有人想知道是否需要同时构建User
和Phone
个存档。
如果您确实需要单独的存储库,则可能需要考虑在其上添加Service
图层。
请看一下这个SO answer我回答某人如何解耦的事情(这个例子中有一个Unit of Work
模式,但没关系)