1

つまり、AccessRights が私の dto であり、queryString に "Exec sp_name param1,param2 etc" が含まれている場合

  var accessRights = 
    this.db.ExecuteQuery<AccessRights>(queryString, sqlParams.Values.ToArray()).AsQueryable();

ストアド プロシージャから返されるものが、汎用の ExecuteQuery で渡す型 (dto) に完全にマップできる場合、すべてが完璧に機能します。

問題は、非標準の列名を返すストアド プロシージャがあることです。

基本的に、「userId」、「accessRightId」、「Description」を含む AccessRights クラス (dto) があります。

しかし、新しいストアド プロシージャは UserId、AccessRightId、"TemporaryDescription" を返します。

他のものがそれに依存しているため、今は変更できません...変更した場合

 var accessRights = 
    this.db.ExecuteQuery<AccessRights>(queryString, sqlParams.Values.ToArray()).AsQueryable();

次に、「TemporaryDescription」が表示されません。これは、存在しないため論理的であると思います

私がする必要があるのは、temporaryDescription を説明にマップすることです。

これを行う方法を知っている体はありますか?

4

1 に答える 1

0

[Column(...)]属性を追加してみてください。それがうまくいくかどうかはわかりません。

頭に浮かぶいくつかのオプション:

  • (名前で) 1:1 をマップするクラスを構築し、このSelectデータを (または LINQ クエリを介して)実際の目的のクラスに変換します。
  • 列の名前を変更するラッパーSPを作成します(良くありません。一時テーブルが必要で、おそらくDDL / DMLインターリーブのために再コンパイルを強制します)
  • SP をデータ コンテキスト デザイナーにドラッグし、生成された型で列の名前を手動で変更します (これは、最初の箇条書きの自動実装と考えてください)。
  • SP の興味深い部分を既存の SP から呼び出すことができる UDF に移動 (リファクタリング) し、UDF をデータ コンテキストから直接使用します (UDF をデザイナーにドラッグします)。
于 2009-09-21T15:30:32.113 に答える