1

シナリオ:Entity Frameworkのの多対多の関係を活かし

私のデータベースで

私は重量を指定する余分なフィールドで、一緒に顧客や映画に参加するテーブルを持っていますその関係のEG:

CustomersMovies 
    | -CustomerID 
    | -MovieID 
    | -Weight 

私は最初の2つのフィールドを持っていた場合、Entity Frameworkのは、多対多の関係を認識することになると私はCustomer.MoviesとMovie.Customersを呼び出すことができるでしょう。 3番目のフィールドでは、この関係は壊れています。

理想的には、私はCustomer.Moviesに行くことができるのが大好きです。[0]。結合パラメータを返すには、ウェイトまたは同様のものを使用します。これがサポートされていない場合でも、私はまだ他の関数の多対多の関係が好きです。

このようなものはEntity Frameworkでサポートされていますか?私はほぼ2つのテーブルCustomersMovies(2つのテーブルを結合するだけ)と、与えられた顧客と映画の重みを指定するCustomerMovieWeightsテーブルを作成しようとしていますが、冗長データは理想的ではありません。

種類よろしく、 ハリー

+0

サポートされていませんモデルからウェイトメンバーを除外するか、2つのテーブルを使用するか、同じテーブルをモデルで2回マップする必要があります。 – KristoferA

答えて

0

あなたはジャンクションテーブルから重量列を落とした場合は、あなただけのお客様作品テーブルをマップする必要があります。

ない場合は、すべての3つのテーブルをマップする必要があります。お客様CustomerMovies作品

しかし、もちろん、あなたがこれを行うことができなくなります。

var customer = ctx.Customers.First(); 
var customerMovies = customer.Movies; 

あなたがこれを行う必要があります:お客様がへの直接ナビゲーションプロパティを持っていないので

var customer = ctx.Customers.First(); 
var customerMovies = customer.CustomerMovies.Movies; 

ムービー - ナビプロパティが、カスタマームービー(またはその逆)になります。

正直なところ、私はあなたの最後のアイデアを持っていきます。 CustomerMoviesテーブルには、FK(CustomerId、MovieId)と、重みのための別の「メタデータライク」テーブルのみが含まれています。

この方法で、多対多をEDMXに正しくマップできます。

+0

私は大成功はしていませんが、CustomersMoviesからSELECT CustomerID、MovieIDだけのビューを作成して、それをモデルに追加することは可能ですか?ビューには明らかに外部キーがありませんので、それは素晴らしい再生していません。 – Harry

+0

はい、可能です(私は思います)。しかし、ビューは基本的に読み取り専用なので、 "CustomerMovies"エンティティに対してUPDATE操作を実行することはできません(たとえば、UPDATE vwCustomerMoviesを実行できません。 ? – RPM1984

関連する問題