2017-01-04 13 views
1

これまでにないasp.netコアmvc​​アプリケーションで、この前例のないシナリオを実行しました。コンテキストのために、私のアプリケーションはカードゲームのためのデッキ構築/共有ウェブサイトです(hearthpwnやicyveinsに似ています)。私は新しいカードがゲームにリリースされるまで変わらないままになるテーブル "カード"を持っています。私はまた、ユーザーのデッキを格納し、Cardテーブルとの関係を必要とするテーブル "Deck"を持っています。 Imはmvc asp.netウェブサイトのチュートリアルから学習し、すべてのデータベースの相互作用のためにentityframeworkcoreを使用する道を続けたいと考えています。だから、デッキのクラスは次のようになります:動的テーブルのナビゲーションプロパティとして静的テーブルを使用する

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; } 
} 

デッキのナビゲーションプロパティにするカードが必要です。チュートリアルで提供されているメソッドを使用してこの作業をどうやって行うのか分かりません。

番号1:dbinitializerを使用し、テスト・データをデータベースにシードすることは、静的な表を使用している間は意味がありません。明らかに各カードが複数のデッキで使用されるか、少なくともそれらの大半が使用されるため、各カード行にDeckIDプロパティが必要です。これは実用的ではありません。論理的に言えば、この方法では、カードがデッキで使用されるたびに新しい既存のカード行を作成する動的なカード表が必要になります。明らかに、これは正しい解決策ではありません。私はデッキモデルの文字列プロパティを使用してcardIDを追加し、そのようにいくつかの魔法を実行することで動作させることができますが、それは怠け者であり、リレーショナルではありません。デッキモデルのナビゲーションプロパティに対して照会できるようにする必要があります。

洞察やヒントは非常に高く評価されます。この質問が巻き込まれてもごめんなさい。でも私の経験で何を尋ねるのかはほとんど分かりません。私はリレーショナルデータベースとasp.netフレームワークには非常に新しいです。前もって感謝します!

EDITは:最も単純な実装は、ルックアップテーブルを持っているだろう、テーブルに参加

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

答えて

2

に使用する新しいデータモデルクラス(DeckCard)を書きました。各デッキには、DeckIdとCardIdを持つデッキカードのコレクションがあります。したがって、異なるデッキは同じカードを指すことができ、デッキごとに新しいカードを必要とせず、このデッキもそのカードにアクセスできるというルックアップだけです。

+0

私は入力を感謝します、私は間違いなくEFでこれを行う方法を始めます。 – tocoolforscool

+0

ルックアップテーブルを使用すると、Deckモデルのカードタイプのナビゲーションプロパティは必要ないことを意味します。 – tocoolforscool

+0

あなたはまだnavプロパティが必要だと思います。次のようにデッキのカードにアクセスしたいと思うでしょう:var myCard = myDeck.DeckCards.Card.Where(x => x.CardId == targetCardId).Single();またはそのようなものです。 – Forklift

3

あなたが探しているのは、中間テーブルです。デッキテーブル、カードテーブル、およびCardInDeckテーブルがあります。デッキテーブルにはDeckIDがあり、CardテーブルにはCardIDがあり、CardInDeckテーブルにはCardIDとDeckIDの両方があります。

この方法で、複数のカードをデッキにリンクすることができます。

誰かがEFでそれを行う方法を説明しなければならないでしょうが、それはあなたがテーブルデザインにしたいものです。

+0

私は入力を感謝し、私は間違いなくEFでこれを行う方法のグーグルを開始します。 – tocoolforscool

関連する問題