2015-05-18 88 views
0

新手到MVC,2013年
代碼首先從現有的數據庫,EF6MVC 5越來越多模型到使用MVC 5和VS的單一視圖

目標: 要顯示所有車型,從上市一在tblMVP

下面列出了一個MVP的tblModel是該項目的當前狀態和運行時錯誤:

錯誤: System.Collections.Generic.IEnumerable<WebApplication2.Models.tblAccount>「不包含用於定義」 tblModels「和沒有擴展方法」 tblModels'接受System.Collections.Generic.IEnumerable<WebApplication2.Models.tblAccount>類型的第一個參數可以找到(是否缺少using指令或程序集引用?)

型號:


    [Table("tblMVP")] 
    public partial class tblMVP 
    { 

     [Key] 
     public int ID { get; set; } 
     public int AccountID { get; set; } 

     public virtual tblAccount tblAccount { get; set; } 
    } 
    [Table("tblModel")] 
    public partial class tblModel 
    { 

     [Key] 
     public int ID { get; set; } 
     public int AccountID { get; set; } 

     public virtual tblAccount tblAccount { get; set; } 
    } 
    [Table("tblAccount")] 
    public partial class tblAccount 

    { 
    public tblAccount() 
     { 

      tblModels = new HashSet(); 
      tblMVPs = new HashSet(); 

     } 

     public int ID { get; set; }  

     public virtual ICollection tblModels { get; set; } 
     public virtual ICollection tblMVPs { get; set; } 

    } 

控制器:

// GET: MVP 
public ActionResult Index() 
{ 
var tblAccounts = db.tblAccounts.Include(t => t.tblModels).Include(t => t.tblMVPs);   
return View(db.tblAccounts.ToList()); 
} 

查看

@model IEnumerable<WebApplication2.Models.tblAccount> 

<table class="table"> 
<tr> 
    <th> 
     @Html.DisplayNameFor(model => model.tblModels.partNumber) 
    </th> 

    <th> 
     @Html.DisplayNameFor(model => model.AccountName) 
    </th> 

</tr> 

@foreach (var item in Model) { 
<tr> 
    <td> 
     @Html.DisplayFor(modelItem => item.tblModels.partNumber) 
    </td> 
    <td> 
     @Html.DisplayFor(modelItem => item.AccountName) 
    </td> 
    </tr> 
} 
</table> 
+1

在上面,試試'model.First()tblModels.partNumber'。此外,您的數據庫對象的命名約定很差,並且不符合標準。 – DLeh

+0

嘗試了model.First()。tblModels.partNumber並得到一個類似的類型錯誤:'WebApplication2.Models.tblAccount'沒有包含'first'的定義,也沒有包含接受'WebApplication2'類型的第一個參數的擴展方法'first'。可以找到Models.tblAccount'(你是否缺少using指令或程序集引用?) – HoldingPattern

回答

0

你試圖做兩件不同的事情。你有一個IEnumerable<tblAccount>,它沒有屬性,它只有一個tblAccount的列表。

因此,在頂部,您正嘗試獲取IEnumerable的屬性,但沒有任何屬性。

在底部,您正在迭代IEnumerable,並獲取tblAccount的屬性,您正在做的是正確的。

因此,在頂部,您需要從IEnumerable獲得tblAccount,以便您可以獲取它的屬性。以下是您如何做到的一個例子。

@model IEnumerable<WebApplication2.Models.tblAccount> 

<table class="table"> 
<tr> 
    <th> 
     @Html.DisplayNameFor(model => model.First().tblModels.partNumber) 
    </th> 

    <th> 
     @Html.DisplayNameFor(model => model.First().AccountName) 
    </th> 

</tr> 
+0

複製並粘貼上述內容,並且可以訪問tblAccount屬性,但tblModels屬性不可訪問,例如tblModels.partNumber或tblModels.AccountID。 – HoldingPattern

+0

從以上評論繼續: 在tblAccount類中,更改導航屬性 public virtual ICollection tblModels {get;組; }到 public virtual tblModel tblModels {get;組; }允許訪問tblModels的屬性,但會導致運行時錯誤 tblModel_tblAccount_Source::多重性在關係「tblModel_tblAccount」中的角色'tblModel_tblAccount_Source'中無效。因爲「依賴角色」屬性不是關鍵屬性,所以「依賴角色」的多重性的上界必須爲「*」。 – HoldingPattern

+0

這是一個單獨的問題。 – DLeh

0

最終,這是什麼工作的裸基本版本。無論好壞,tblModel和tblMVP之間的直接關係都已創建,並且控制器中的模型加載已重新排列。

型號:


    [Table("tblMVP")] 
    public partial class tblMVP 
    { 
     public tblMVP() 
     { 
      tblModels = new HashSet(); 
     } 

     public int ID { get; set; } 

     public int AccountID { get; set; } 

     public string Description { get; set; } 

     public virtual tblAccount tblAccount { get; set; } 

     public virtual ICollection tblModels { get; set; } 
    } 

    [Table("tblModel")] 
    public partial class tblModel 
    {   
     [Key] 
     public int ModelID { get; set; } 

     public int AccountID { get; set; } 

     [Required] 
     [StringLength(50)] 
     public string partNumber { get; set; }   

     [StringLength(5000)] 
     public string description { get; set; } 

     public int? MVPID { get; set; } 

     public virtual tblMVP tblMVP { get; set; } 

     } 

    [Table("tblAccount")] 
    public partial class tblAccount 
    { 
     public tblAccount() 
     { 
      tblModels = new HashSet(); 
      tblMVPs = new HashSet();    
     } 

     public int ID { get; set; } 

     [StringLength(150)] 
     public string AccountName { get; set; } 


     public int? AccountNumber { get; set; } 

     public virtual ICollection tblModels { get; set; } 

     public virtual ICollection tblMVPs { get; set; } 
    } 

**Controller:** 
    // GET: MVP 
    public ActionResult Index() 
    { 
    var tblModels = db.tblModels.Include(t => t.tblAccount).Include(t => t.tblMVP).ToList(); 
    return View(tblModels.ToList()); 
    } 

查看

@model IEnumerable<MDLX_Bootstrap_V5.Models.tblModel> 

<table class="table"> 
<tr> 
    <th> 
     @Html.DisplayNameFor(model => model.tblAccount.AccountName) 
    </th> 

    <th> 
     @Html.DisplayNameFor(model => model.partNumber) 
    </th> 

</tr> 

@foreach (var item in Model) 
{   
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.tblAccount.AccountName) 
     </td> 

     <td> 
      @Html.DisplayFor(modelItem => item.partNumber) 
     </td> 
    </tr> 
    } 
</table>