2011-01-19 11 views
3

既存のDBでEFを使用しようとしています。私は自分のデータモデルにClientテーブルを持ち込み、EFにClientエンティティを作成させました。私はSproc、GetClientSearchを持っています。これは、その呼び出しに必要なすべてのものであるため、Clientテーブルから15のカラムのうち5つしか返しません。Entity Framework:既存のEFエンティティへのsproc結果のマッピング

は、ここで私はこれまで何をやったかです:

  • 追加輸入を機能とクライアントエンティティにマッピングするためにPROCを設定するSPROC。

  • コンテキストを使用してprocを実行すると、「指定された 'GAINABSModel.Client'と互換性がありません。 'MiddleInitial'型のメンバーには、データに対応する列がありません同じ名前の読者。 "例外。 (MiddleInitialは、procで返される列の1つではありません)

  • 私はprocにマップする新しいエンティティを作成できますが、インポートする必要があるすべてのprocについては実行したくありません私のモデル。

  • DBが現在プロダクションで使用されていると仮定すると、ストアドプロキシを現在のエンティティにマップするよう変更することはオプションではない場合があります。プロパティを持つ1:

現在返される列が1でなくても、クライアントエンティティへのSPROCの結果をマッピングする方法があり、2010年

だから、EF 4とVSを使用してEFエンティティの?

答えて

2

うん、EFでの私の多くの痛みのポイントの一つ。

SPを変更できない場合は、既存のSPの上に「ラッパー」SPを作成することをお勧めします。

つまり、既存のものを呼び出し、必要のない列に対してはNULLを返しますが、エンティティには必須です。

もちろん、エンティティを適切に作成することをお勧めします。

別のオプションは、基本的には、L-R SPROC結果、あなたが提供エンティティとの間を行う、ObjectContext.Translate<T>を使用することです。

結果セットはフィールドが含まれていない場合、そのオブジェクトのプロパティはnullになります。おそらくあなたが望むものである

+0

WOW!私のポストは何ヶ月も行動しないで、同じ日に2つのポストを見る。情報をありがとう。私は私が行っている現在のものがあまりにも遠くに行って変更を行って以来、私の次のプロジェクトでそれを試してみる必要があります。私が必要としていたのとまったく同じように聞こえる。 – jonnyb

1

同じ問題が発生しています。 UserEntityがUser Tableから作成され、3つのプロシージャがあるとします。

  1. のauthenticateUser - 認証
  2. RetriveUser後のユーザテーブルから復帰4列は、 - だけドロップダウン目的のためにユーザーIDとユーザー名を返す - ユーザテーブル
  3. GetUserNameから10列を返します。

異なるSPごとに異なるエンティティを作成する場合。重複のためにデザインが悪くなります。

私は、これらすべてのSPに対して同じエンティティを使用する他の方法はありません。

全体的に、私は、生産のレガシーアプリケーション用の少なくともエンティティフレームワークをお勧めしません。(ここで、あなたもあなたのSPのを更新することはできません。)

関連する問題