2017-01-07 23 views
0

私はMVCとEntity Frameworkにはとても新しいので、asp.netチュートリアルに従おうとしていて、大きな問題に遭遇しました。私は正しく表示されるテーブルを持っていますが、参照テーブルのデータではなくテーブルの外部キーを示しています。私はここで熱心なローディングを利用したいと思っていますが、どこに私のインクルードを入れるのか分かりません。 asp.netのチュートリアルはMVCの古いバージョンのものだと思います。私のインクルードは次のスニペットに入るべきだと私は理解しています。私はアーティストの種類を含めることを試みています。Eager Loading使用の問題を含む

まず、私のモデルクラスの一部:

 modelBuilder.Entity<tblArtist>() 
      .HasMany(e => e.tblArtisttblArtistType) 
      .WithRequired(e => e.tblArtist) 
      .WillCascadeOnDelete(false); 

     modelBuilder.Entity<tblArtist>() 
      .HasMany(e => e.tblIssueArtist) 
      .WithRequired(e => e.tblArtist) 
      .WillCascadeOnDelete(false); 

     modelBuilder.Entity<tblArtist>() 
      .HasMany(e => e.tblIssueAutograph) 
      .WithRequired(e => e.tblArtist) 
      .WillCascadeOnDelete(false); 

     modelBuilder.Entity<tblArtistType>() 
      .HasMany(e => e.tblArtisttblArtistType) 
      .WithRequired(e => e.tblArtistType) 
      .WillCascadeOnDelete(false); 

そして、私のコントローラのコード:

public class tblArtistsController : Controller 
{ 
    private joerdieComicsModel1 db = new joerdieComicsModel1(); 

    // GET: tblArtists 
    public ActionResult Index() 
    { 

     return View(db.tblArtist.ToList()); 
    } 

    // GET: tblArtists/Details/5 
    public ActionResult Details(int? id) 
    { 
     if (id == null) 
     { 
      return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
     } 
     tblArtist tblArtist = db.tblArtist.Find(id); 
     if (tblArtist == null) 
     { 
      return HttpNotFound(); 
     } 
     return View(tblArtist); 
    } 

私には、コードは公共のActionResultインデックス()メソッドに行く必要がありますが、私はあることを理解それがどうやって行なわれたのか分からなくなった。

ありがとうございます。

+0

具体的にロード/表示したい情報/データはありますか? – Shyju

+0

tblArtistTypeのartistTypeが、現在表示されているデータとともに表示されます。アーティストテーブルのデータはどれですか。 – joerdie

+0

ArtistとArtistTypesはどのように接続されていますか?これらのクラスの関連部分を質問に追加できますか? – Shyju

答えて

0

多対多の関係を持つEntity Framework は自動的にテーブルインターフェイスを作成しますが、外部キー を持つリレーションシップには「EX:ArtistId」が必要です。例については

Person.cs

public class Person 
    { 
    public int Id { get; set; } 

    public string Name { get; set; } 

    public ICollection<Book> Books { get; set; } 
    } 

Book.csモデルビルダーで

public class Book 
{ 
    public int Id { get; set; } 

    public string Name { get; set; } 

    public Person Person { get; set; } 

    public int PersonId { get; set; } 
} 

modelBuilder.Entity<Person>() 
      HasMany(_ => _.Books) 
      .WithRequired(_ => _.Person) 
      .HasForeignKey(_ => _.PersonId) 
      .WillCascadeOnDelete(); 

そして、参照してください: One To Many

+0

私はここでそれを取得し始めています。私のモデルビルダーは大丈夫です。そして、それぞれのクラス、tblArtistとtblArtistTypeはパブリック仮想ICollection artistTypes {get;}を持ちます。セット; }および「public virtual ICollection アーティスト{get; set;}」とそれぞれ関連付けられています。しかし、私のインデックスページでは、@ Html.ListBox( "artistTypes"、新しいSelectList(item.artistTypes、 "tblArtistTypeID"、 "ArtistType"))を使用しようとしましたが、 'dbo.tblArtistTypetblArtists'私のビルドのどこにでも存在しません。私の接続しているテーブルは自分のIDを持っています。それが問題だろうか? – joerdie

関連する問題