2011-08-04 14 views
1

私は3テーブル、CarsPersonsCarOwnersと言う。Linq to SQL One To Many

Carsは車のテーブルであり、Personsは車を所有できる人とは異なります。 CarOwnersは、CarIdおよびPersonIdの関係およびCarOwnerId PKを有する。

リレーションシップを作成してlinqコンテキストにドラッグすると、CarOwnersという名前のPersonクラスのプロパティが生成されます。この人は、私は次のクエリを実行する必要があります所有している車を取得するには:

var cars = person.CarOwners.Select(c=> c.Car); 

しかし、私は行うことができるようにしたいと思います:

var cars = person.Cars; 

は、そのすべてで可能ですか?特別なステップは非常に迷惑です。

+0

人物には、その人物が関連付けられている車を表すコレクションがありますか?また、どのように人が住んでいるのですか – msarchet

+0

人はDBから取ったランダムな人物です。人はCarOwnersのコレクションを持っていますが、私は車の選択が欲しい –

+0

あなたのためのLinqクエリを行うPersonクラスにCarsプロパティを追加できますか? –

答えて

4

あなただけPersonに新しいプロパティを作成することができます

public partial class Person 
{ 
    public IEnumerable<Car> Cars 
    { 
     get { return this.CarOwners.Select(c => c.Car); } 
    } 
} 

をそれとも、物理モデルから論理モデルを分離することができEntity Frameworkのにアップグレードしてください。

+0

残念ながら、これは追加と削除では機能しません:( –

1

をSQLデータベースのCarOwnersから削除してください。次に、デザイナーモードでCarIdPersonIdをSSMSで(shiftキーを使用して)選択し、右クリックして `Set Primary Key 'を選択します。

EF 4では、この方法でモデルにナビゲーションキーのみを表示します(とCar.Personsを使用できます)。 L2Sについてはわかりません。

+0

PKを組み合わせても助けにならなかった:/私はこれを@Jakubのやり方でやる –