最初にEFコアコードを使用して結合テーブルを作成する方法

asp.net-mvc entity-framework-core

質問

私はこれらの3つのモデルを持っています:

public class Card
{
    public int ID { get; set; }
    public string Name { get; set; }
    public string Class { get; set; }
    public string Image { get; set; }
}

public class Deck
{
    public int ID {get; set;}
    public string Name {get; set;}
    public string Class {get; set;}
    public virtual ICollection<DeckCard> DeckCards {get; set;}
}

public class DeckCard
{
    public int ID {get; set;}
    public int DeckID {get; set;}
    public int CardID {get; set;}
}

DeckCardモデルを本質的に結合テーブルとして使用したいと思います。私はDecksController / Indexビューにそれを設定する必要があります。誰かが私に指導を与えたり、正しい方向に私を向けることができますか?

カードテーブルは静的なテーブルであることに注意してください(私はそれが正しい用語であるかどうかわかりませんが、ゲームの現在のカード(デッキ構築のウェブサイトです)に変更されません)。

受け入れられた回答

最初。 1対多リレーションのモデル(DeckCard)を作成する必要がないため、EF自動このテーブルをデータベースに作成することができます。

二番目。 DbContextクラスにOnModelCreatingメソッドを追加またはオーバーライドする例:

MyApplicationDbContext.cs

 public class MyApplicationDbContext : DbContext
 {
     public DbSet<Card> Cards { get; set; }

     public DbSet<Deck> Decks { get; set; }

   // This is Model Builder
     protected override void OnModelCreating(DbModelBuilder builder)
     { 
           modelBuilder.Entity<Card>()
                .HasRequired<Card>(_ => _.Card)
                .WithMany(_ => _.Deck);

     }

 }

DecksController.cs

 public ActionResult Index()
 { 
      var model = context.Card.AsNoTracking().Include(_ => _.Decks).ToList(); 

      return View(model);
 }

Eagerの読み込みを伴う結合クエリの場合は、 Include();使いInclude();

また、以下を参照してくださいリンク:

Entity Framework 6のパフォーマンスを向上させる

エンティティ・フレームワーク関連エンティティのロード

1対多の関係を構成する

EFコアにおける関係


人気のある回答

現在のエンティティ構造では、3つのデータセットのすべてを結合し、DeckIdでグループを作成して結果を導き出すことができます。

私は私のビューのためのこのグループ化されたデータ表現のための2つのビューモデルクラスを作成します。

public class DeckVm
{
    public int Id { set; get; }
    public string Name { set; get; }
    public IEnumerable<CardVm> Cards { set; get; }
}
public class CardVm
{
    public int Id { set; get; }
    public string Name { set; get; }
}

今すぐ参加する

var decksWithCards = (from dc in db.DeckCards
                join d in db.Decks on dc.DeckID equals d.ID
                join c in db.Cards on dc.CardID equals c.ID
                select new { DeckId = d.ID, DeckName = d.Name,
                             CardId = c.ID, CardName = c.Name })
    .GroupBy(x => x.DeckId, d => d,
        (ky, v) =>
            new DeckVm
            {
                Id = ky,
                Name = v.FirstOrDefault().DeckName,
                Cards = v.Select(h => new CardVm { Id = h.CardId, Name=h.CardName})
            })
    .ToList();

decksWithCardsはあなたのビューに渡すことができるList<DeckVm>になります。 List<DeckVm>あなたのビューを強く型付けする必要があります。



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ