すべてのレコードが同じテーブルにあるように、識別子フィールドで継承を実装しました。私のbasetypeはPerson(テーブルの名前でもあります)で、DriverとPassengerはそれを継承しています。 Personへのオブジェクトコンテキストのクエリを実行すると、正しいタイプのインスタンス(ドライバとパッセンジャ)が返されます。例:EF4の継承とストアドプロシージャ
var q = from d in ctx.Person
select d;
しかし、ストアドプロシージャを呼び出し、その関数の出力を型Personにマップする関数も作成します。しかし、今私はこのメソッドを実行すると、人とドライバまたは乗客のリストを取得します。
これを解決する方法は誰か、またはこれはEF4のバグですか?
問題は、私のディスクリミネータフィールドがオブジェクトに公開されておらず、ライブラリを使用している開発者にそのプロパティを公開したくないためです。だから私はネイティブの解決策が必要になるのではないかと心配しています:-( –
ああ、ディスクリミネータはあなたのモデルにはありません。例: 'usp_GetDrivers'(ドライバのコレクションにマップ)、' usp_GetPassengers'(乗客のコレクションにマップする)あなたはObject Contextに一つのメソッドを持つことができます。その仕事はありますか? – RPM1984