【问题标题】:Combining data from two repositories MVC4结合来自两个存储库 MVC4 的数据
【发布时间】:2013-08-05 17:59:18
【问题描述】:

我正在尝试在 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();
    }

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-4 repository


    【解决方案1】:

    您需要问自己的第一个问题是:我需要这两个存储库吗?
    在您的域定义中同时拥有它们是否有意义?如果没有OwnerDwelling 是否有意义,反之亦然?

    DDD 最佳实践之一是限制每个聚合根有一个存储库。看看这个SO question,有人想知道是否需要同时构建UserPhone 存储库。

    如果您确实需要单独的存储库,那么您可能必须考虑在它们之上添加一个Service 层。

    请看一下这个SO answer,我在那里回答了某人如何解耦(这个例子中有一个Unit of Work 模式,但没关系)

    【讨论】:

    • 哇“我以前是瞎子,但现在我能看见了”。非常感谢!很棒的阅读。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-16
    • 2010-09-19
    • 2012-04-10
    • 1970-01-01
    • 2015-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多