2013-08-05 26 views
0

我試圖結合來自MVC4中兩個存儲庫的數據。我在我的Action函數中使用連接語句從兩個表中收集信息。我將這些數據傳遞給我的觀點。我對如何正確合併來自兩個存儲庫的數據有點困惑。一些幫助將不勝感激。謝謝!組合來自兩個存儲庫的數據MVC4

在控制器:

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

第一個問題是:我需要那些2個庫?
它是否使你的域定義中的sens有兩個? Dwelling沒有Owner是否有意義,反之亦然?

DDD最佳實踐之一是限制每個聚合根的一個存儲庫。看看這個SO question,有人想知道是否需要構建UserPhone存儲庫。

如果您確實需要單獨存儲庫,那麼您可能不得不考慮在其上添加Service圖層。

請看看這個SO answer,我回答別人如何脫鉤的事情(有一個在這個例子中Unit of Work模式,但它並不重要)

+0

哇「我是個盲人,但現在我可以看到」。非常感謝你!非常棒的閱讀。 – SINGULARITY