2011-10-28 19 views
1

私の質問のタイトルはかなり正確だとは思わないので、私の問題点を説明しようとします。
私は2つのモデルがあります:条及びユーザーEntity Framework自動参加

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を渡すと私はレールがこの可能性を持っていると私はEF 4.1は、あまりにもそれを持っていたと思ったかなり確信している

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

のようなものを作ることができます。

答えて

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'の定義が含まれておらず、拡張メソッド 'MyArticles'は 'System.Collections.Generic'型の最初の引数を受け入れません。 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

OK私が知った!接続文字列にMultipleActiveResultSets = trueを設定する必要があります。 :D – lesce

関連する問題