0

我是MVC Noob,但我真的想獲得一些使用MVC的經驗,所以我嘗試使用MVC重新創建一個Asp Classic項目。下面的代碼不會顯示膳食/索引頁面上與菜單相關的膳食列表。在視圖中顯示模型

但是,我已經閱讀了幾種不同的模式,ninject和自動映射器,但是從我可以告訴它什麼都沒有,這是處理簡單關聯時所必需的。

我只想將菜單添加到菜單並彙總每個菜單的膳食價格。

型號:

public class Meal 
{ [Key] 
    public int MealId { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public decimal Price { get; set; } 
    public int MenuId { get; set; } 
} 


public class Menu 
{ 
    [Key] 
    public int MenuId { get; set; } 
    public DateTime WeekendServed { get; set; } 
    public decimal Price { get; set; } 
    public List<Model> Meals { get; set; //Menus have meals. 
} 

菜單控制器:

public ViewResult Index() 
{ 
    return View(unitOfWork.MenuRepository.Get()); 
} 

Menu/Index/

@model IEnumerable<Skimos.Models.Meal> 
---- 

<Table Headers> 

@foreach (var item in Model) { 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.WeekendServed) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Price) 
     </td> 
     <td> 
      @foreach (var meal in item.Meals) 
      { 
       @Html.Display(meal.Name) 
       @Html.Display(meal.Description) 
       @Html.Display(meal.Price.ToString()) 
      } 
     </td> 
     <td> 
      @Html.ActionLink("Edit", "Edit", new { id=item.MenuId }) | 
      @Html.ActionLink("Details", "Details", new { id=item.MenuId }) | 
      @Html.ActionLink("Delete", "Delete", new { id=item.MenuId }) 
     </td> 
    </tr> 
} 

MenuRepository public IQueryable Menus { get { return context.Menus; } } 編輯:

+0

可以顯示'unitOfWork.MenuRepository.Get()'的代碼,以及強類型的視圖是什麼? – christiandev

+0

請勿圍繞實體框架實施存儲庫/工作單元模式。 EF *已經*使用這種模式('DbContext'是你的UoW,你的'DbSet's是你的倉庫)。如果你想抽象使用EF的邏輯(這是一個好主意),那麼應該實現類似服務模式的東西。 –

+0

@ChrisPratt有關如何在EF中集成服務模式的任何鏈接? ,EF通過provind DBSet和DBContext爲您提供了所有事情:如何更好地控制開發人員不允許將對象添加到某些數據集,而不允許在DBSet上執行某些操作? –

回答

2

問題是EF需要列表類型的導航性能兩件事情:1)ICollection型和2)virtual的財產:

所以,如果您在Meals屬性更改爲以下內容,你應該是不錯的:

public virtual ICollection<Meal> Meals { get; set; } 

其原因ICollection是,從EF返回值將是一個IQueryable類型。虛擬的原因是EF實際返回代理類而不是實際的模型類。這些代理會覆蓋返回數據集的導航屬性。如果您的財產不是虛擬的,EF無法覆蓋它。

+0

我以前可能沒有問過正確的問題。我甚至從來沒有考慮嘗試使用包含菜單的構造函數來對Meal類進行建模...此EF實現IoC嗎?如果您能夠提供關於我如何「解決/黑客」解決我遇到的問題的方法,我會很樂意選擇您的答案。感謝收聽。 – stink

+0

我不確定你在說什麼。然而,你的「修復」是非常糟糕的設計。也就是說,'Menu'上有6個獨立的'Menu'導航屬性,6個不同的外鍵用於'Meal'。無論你是否只有6餐,這都是無關緊要的,因爲這明顯是M2M關係,應該這樣建模。如果明天,你實際上需要7頓飯。現在你必須開放課程來添加另一個課程,並打破了開放式的原則。如果你發現自己在做'Something1,Something2,Something3,...'*你做錯了*。 –

+0

我明白了,我從我的解決方案和此頁面中刪除了它。感謝您的輸入。 – stink