2011-10-28 72 views
1

我不認爲我的問題的標題是非常準確的,所以我會試着解釋我的問題是什麼。
我有2種型號:文章和用戶實體框架自動化連接

public class Article 
{ 
    public int ID { get; set; } 
    [Required] 
    public string Title { get; set; } 
    [Required] 
    [DataType(DataType.MultilineText)] 
    public string Content { get; set; } 
    [Required] 
    public User Author { get; set; } 
    public int Likes { get; set; } 
} 
public class User 
    { 
     public int ID { get; set; } 
     public string Name { get; set; } 
     public string Email { get; set; } 
     public ICollection<Article> MyArticles { get; set; } 
    } 

和我的數據庫上下文

public class Context: DbContext 
    { 
     public DbSet<User> Users { get; set; } 
     public DbSet<Article> Articles { get; set; } 
    } 

有沒有辦法列出我從用戶模型查看和訪問數據的文章(表) ? 例子:如果我通過var mode = db.Articles通過控制器 我可以做類似

foreach(var item in Model) 
{ 
    <p>item.Title</p> 
    <p>item.Content</p> 
    <p>item.Author.Name</p> 
} 

我敢肯定軌有這種可能性,我想EF 4.1了這一點。

回答

1

如果你的模型是User一個實例,那麼你可以使用你的觀點如下:

foreach(var article in Model.MyArticles) { 
    <p>article.Title</p> 
    <p>article.Content</p> 
    <p>article.Author.Name</p> 
} 
+0

我試過了,它給我這個錯誤_CS1061:'System.Collections.Generic.IEnumerable '沒有包含'MyArticles'的定義,也沒有包含接受'System.Collections.Generic'類型的第一個參數的擴展方法'MyArticles'。 IEnumerable '可以找到_ – lesce

+0

這是因爲您需要將單個用戶傳入視圖。否則,您需要遍歷模型中的用戶,並更改我的代碼以便從外部循環中使用該用戶。 – flipchart

1

所有負荷用戶和文章的第一個(如果使用延遲加載,你可以跳過這一步):

var users = context.Users 
    .Include(u => u.MyArticles)      
    .ToList(); 

比你的觀點傳遞用戶列表:

foreach(var user in Model) 
{ 
    <h2>@user.name</h2> 
    foreach(var article in user.MyArticles) { 
     <p>@article.Title</p> 
     <p>@article.Content</p> 
     <p>@article.Author.Name</p> 
    } 
} 
+0

我得到一個「已經有一個與此命令關聯的打開的DataReader,必須先關閉」錯誤。有任何想法嗎 ? – lesce

+0

好的,我發現了!我需要在我的連接字符串中設置MultipleActiveResultSets = true。 :d – lesce