2

Driver というエンティティがあり、Driver のリストを取得するには、次のように呼び出します。

List<Driver> drivers = _context.Drivers.Select(x=>x);

ドライバーは詳細を持つことができ、それらはそれらの間の外部キーですが、私はできません:

List<Driver> drivers = _context.Where(x=>x.id == id && x.Detail.id == detailId);

Where 句で外部キー プロパティにアクセスするにはどうすればよいですか?

を使用してEntity Framework 3.5います。

ステートメントは機能しますが、(x=>x) が必要かどうかはわかりませんが、実際にはコンパイルしていません。

List<Driver> drivers = _context.Drivers.Select(x=>x);

問題は、Driverエンティティに との外部関係がありDetail、詳細テーブルへの外部キーでDriverある列があり、Entity Framework 3.5 を使用しているため、またはDetailIdにアクセスできないことです。彼らは現れません。外部キーを含めずに選択できることについて何か読んだことがありますが、今のところは続けています。Driver.Detail.IdDriver.DetailIdEF 3.5EF 4EF 3.5

私はやろうとしましたが.Include("Detail")、それは私にいくつかの例外を与えましたDetail not being a navigation property.

4

3 に答える 3

0

Includeあなたの場合はメソッドを使用してください。MSDN を参照

于 2013-05-18T22:29:04.417 に答える
0

私はEF 3.5に精通していませんが、次のように取り組むことができるかもしれません:

context.drivers.Where(x => x.Detail == 
     context.Details.FirstOrDefault(d => d.Id == detailId))
于 2013-05-18T22:39:54.720 に答える
0

_context.Where()ではないのでできませ_contextIQueryable<Driver>

_context.Drivers.Where()代わりに試してください。

一番の手がかりはDetail 、ナビゲーション プロパティではないというエラー メッセージです。エンティティに 1 つ追加してみてくださいDriver- 1 つのドライバーの場合: 多くの詳細:

public virtual ICollection<Detail> Details { get; set; }

1 ドライバーの場合: 1 詳細:

public virtual Detail Detail { get; set; }

.dbml では、関連付けを使用してそれらを指定できます。モデルを既存のデータベースからインポートした場合、FK はassociationsとしてインポートされているはずですが、インポートされていない場合 (またはデータベースで定義されていない場合) は、いつでも手動で追加できます。

ナビゲーション プロパティを使用すると、EF は次のようなものを評価できるはずです。

var driversWithDetails = _context.Drivers
                                 .Where(x => x.Id == id && x.Detail.Id == detailId)
                                 .Include (x => x.Detail).ToList();
于 2013-05-19T02:00:44.720 に答える