命名規則と理解の組み合わせでは苦労しているようです。多対多の関係を完全にコードもデータベースも更新しない
私はデータベースを継承しており、MVCサイトを構築していて、「データベースファースト」のワークフローをうまくプレイすることができませんでした。最後に、私は手動でコンテキストクラスを構築し、幸せに働いています。
私は現在、いくつかの他の既存のエンティティ(多対多)に関係のあるエンティティを追加できない状況にあります。このような
マイデータベースルックス(この質問のために簡略化):
ListItem Option OptionListItems
====== ====== ===============
Id Id ListItem_Id
Name Name Option_Id
私の状況は私が私のListItemの全てを取得することができますプロパティが含まれています
public virtual DbSet<ListItem> ListItems { get; set; }
そして、私はいくつかを使用する場合LINQ、私は以下のようなことをして、アイテムが返され、多対多の関係が満たされ、私のListItem
の中にOption
のリストが得られます:
var item = _context.ListItems
.Where(p => p.Id == id)
.Include(p => p.Options)
.SingleOrDefault();
実際には、上記のクエリを実行しようとしたときに手動でデータベース内にクロスリファレンステーブルを作成しなければならなかった。例外は、dbo.OptionListItems
というオブジェクトがないと言われた。だから、私たちはすべてがいいと思った。
は今、私は新しいListItem
を作成して、1つまたは複数既存Option
にリンクする必要があると私は途方に暮れてよ。
私は単独で私の新しいListItem
を作成し、それが失敗したlistItem.Options.Add(...)
を呼び出そうと、私は特定のOption
への参照を取得し、option.ListItems.Add(...)
をしようとしようとした場合、私もまったく同じ例外を取得したら。
エラーが一種の愉快であり、私が持っているものとは反対側のテーブル名です:
{"Invalid object name 'dbo.ListItemOptions'."}
私はそれが直接に私の文脈上のタイプとプロパティを構築するためにEFの穀物に反すると思われます
public virtual DbSet<OptionListItem> OptionListItems { get; set; }
しかし、私は新しい関係を作成するパターンに完全に困惑しています。
あなたがコントロールする必要がある場合は、DB最初のものを引き裂いたが、コードファーストでどのようにわからない多対多あなたは[この]のように流暢なマップコードが必要になります(http://www.entityframeworktutorial .net/code-first/configure-many-many-relationship-in-code-first.aspx)(一番下に近い) –
ええ、それは変です。私はDBと手作業で作成したPOCOをいくつか持っていました。その上に足場や移動に頼るのではなく、手作業で両面にビットを追加しました。 マッピングを作成しようとする前に(私はそのポストを見ましたが、それが最良のアプローチであるとは確信できませんでした)、使いやすいパターンは何ですか?私は 'ListItem'と' .Add'をOptionsコレクションに持っていくので、それがうまくいくはずです。 – Neil