問題タブ [dapper]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
dapper - 継承と Dapper.net
Dapper.net を使用することにしたのは、私がやりたいことだけを行っているように見えるためです: マッピング、空想は必要ありません。データリーダーとオブジェクトの間のマッピングを処理するのに退屈しています。
私の問題 :
これらのクラスがあるとしましょう:
そして、これらのテーブル:
同じクエリで Foo と Bars を選択する方法を知りたいですか?
これまでの私の唯一の考えは
- バーではないすべての Foo を選択します
- 次に、すべてのバーを選択します
ここには関係をマッピングするためだけにあるため、メソッド「Query」のオーバーロードは使用できません。
.net - SELECT * FROM X WHERE id IN(...)with Dapper ORM
IN句の値のリストがビジネスロジックからのものである場合に、Dapper ORMを使用してIN句を使用してクエリを作成する最良の方法は何ですか?たとえば、クエリがあるとします。
はcommaSeparatedListOfIDs
ビジネスロジックから渡されており、どのタイプでもかまいませんIEnumerable(of Integer)
。この場合、どのようにクエリを作成しますか?これまで行ってきたこと、基本的には文字列の連結を行う必要がありますか、それとも私が気付いていない高度なパラメーターマッピング手法がありますか?
c# - 複雑な低音クラスを備えたコンソールアプリのRazorViewEngine
私はRazorビューエンジンを使用してHTMLをレンダリングし、それをXMLドキュメント内に配置しています。私が使用している基本クラスには、そのオブジェクトのリストを返す静的メソッド(Dapperを使用してリストにデータを入力する)とともに、いくつかのプロパティがあります。抽象クラスである基本クラスを返す必要があるため、メソッドの実行に問題があります。いくつかのサンプルコードを以下に示します。
基本的にPersonData.GetPeople()
、PersonDataクラスが抽象的であるため、への呼び出しは失敗します。どんな考えでもいただければ幸いです。ここからの例をガイドとして使用しています。
c# - dapper.netを使用してmysqlLAST_INSERT_ID()を返すときの無効なキャスト
この質問は、MSSQLについてここで取り上げられています。
Dapperで挿入を実行して挿入されたIDを返すにはどうすればよいですか?
しかし、このソリューションはmysqlでは機能しません。
mysqlを使用してtoを整数にキャストするには、次のLAST_INSERT_ID()
ようにする必要があります。
SELECT CAST(LAST_INSERT_ID() AS UNSIGNED INTEGER);
スタックトレースは次のとおりです。
MySQLでこの問題を解決した人はいますか?
編集:
私はこれを次のように機能させることができました:
おそらく理想的ではありませんが、機能します。
c# - 動的に決定されたプロパティ名で匿名オブジェクトを作成するにはどうすればよいですか?
値の配列が与えられたので、これらの値に基づくプロパティを持つ匿名オブジェクトを作成したいと思います。プロパティ名は、配列内の値のインデックスである"pN"
だけです。N
たとえば、与えられた
object[] values = { 123, "foo" };
匿名オブジェクトを作成したい
new { p0 = 123, p1 = "foo" };
これを行うために私が考えることができる唯一の方法は、サポートするために妥当な数のパラメーターまでswitch
またはif
チェーンを使用することですが、これを行うためのよりエレガントな方法があるかどうか疑問に思いました:
バックグラウンド
データベースに対してSQLステートメントを実行する既存のメソッドのセットがあります。メソッドは通常string
、sqlステートメント用にaを取りparams object[]
、パラメーターがある場合はaを取ります。クエリでパラメータを使用する場合、それらの名前はになります@p0, @p1, @p2, etc.
。
例:
これは次のように呼ばれます:
ここで、このクラス内でDapperを使用して、 Dapperのメソッドをラップおよび公開Query<T>
し、既存のメソッドと一貫性のある方法でこれを行います。たとえば、次のようになります。
しかし、DapperのQuery<T>
メソッドは、匿名オブジェクトのパラメーター値を取ります。
Dapperにパラメータを渡すための匿名オブジェクトの作成についての私の質問につながります。
DynamicParameter
@Paolo Tedescoの要求に応じて、クラスを使用してコードを追加します。
DapperのSqlMapper.csファイルの581行目に例外をスローします。
例外はSqlException
:
スカラー変数「@p0」を宣言する必要があります。
cmd.Parameters
プロパティをチェックすると、コマンドに構成されたパラメーターが表示されません。
architecture - リポジトリ パターン Where と軽量 ORM
私の IRepository については、次のようにします。
- Dapper、Petapoco、Massiveなどのマイクロオームで使用できるようにするため... SPEED用
- サーバー上で実行される where 句を使用するには、できれば Expression/IQueryable スタイルを使用します (これも非常に交換可能です)。
両方手に入れることは可能ですか?マイクロオームの IRepository Where をどのように記述しますか? マイクロ ORM は、リポジトリを必要とするほど大きなプロジェクトに適していますか?
スピードとスワップ機能が必要です。私のリポジトリパターンが価値のないところに良いものがなければ、そうですか?
c# - 抽象クラス参照から継承されたEntitySetのdapperPropInfoSetterがnull
パフォーマンスを向上させるために、厄介なLINQ2SQLヒットをいくつかのdapperクエリに置き換えようとしています。そうすることで、ASN情報に必要なすべての情報を保持するために必要な大きなオブジェクトを作成するために、さまざまなオブジェクトを一緒に織り込む必要があります。
私が抱えている現在の問題は、抽象クラスOrdersにあります。このクラスは、discriminatorプロパティを使用して2つの別個のクラスAutionOrderとMerchantOrderによって実装されます。
dapperを使用して抽象クラスであるオブジェクトを作成することはできないため、代わりにパブリッククラスの1つを使用しています。ただし、オブジェクトをビルドしようとすると、オブジェクトの内部で失敗しGetSettableProps
、適切なものが見つかりますDeclaringType
が、メソッドは、またはでGetProperty
あるプロパティを検索するときにnullを返します。私はそれを使ってハックしようとしましたが、成功しませんでした。internal
EntitySet
t.BaseType.GetProperty
p.GetAccessors().First().GetBaseDefinition().DeclaringType.GetProperty(p.Name).GetSetMethod(true)
ダミーオブジェクト:
注文
OrderID、Name、Address、RowVersion(internal)、Shipments(EntitySet)、OrderDetails(EntitySet)、Customer(EntityRef)
発送
ShipmentID、OrderID、TrackingNumber
注文詳細
OrderDetailID、OrderID、Product、QTY、Price
お客様
CustomerID、名前、
この特定のSQLヒットでは、必要な1対1の関係マッピングのいくつかを取得しようとしています。
SELECTo。*fromOrders as o left join Customers as c on o.CustomerID = c.CustomerID where o.OrderID in(1,2,3);
これは私がdapperを利用し、それを魔法のようにするために使用しているものです。
Orderをパブリッククラスに変更すると、この問題は解消されますが、これは望ましい副作用ではありません。RowVersionのpropInfoを設定しようとすると失敗します-これを内部ではなくパブリックに切り替えると、この問題は解決しました-望ましくありませんが。ただし、OrderのShipmentsオブジェクトを作成しようとすると失敗します。Orderがパブリッククラスの場合も、これは問題になりません。
また、ShipmentstoOrdersやOrderDetailstoOrdersなどの多対1の関係を取得し、結果を適切なOrder Objectに正規化するために、個別のクエリを実行しています。MerchantOrderはほとんど空のクラスであり、実際の特別なロジックはありません。ここでの識別の違いは、実際のSQLヒットの前に抽象化されたCustomerIDを最終的に見つける方法です。
また、2011年12月20日現在の最新バージョンのdapperを使用しています。
私はdapperが本当に好きですが、この問題は私の頭を混乱させています-助けてくれてありがとう!
sql - L2S プロバイダーを呼び出して述語を Func の形式に変換する方法SQL where 節に?
私は自分のアプリケーションで L2S を使用していますが、クエリのパフォーマンスと迷惑なn+1 選択の問題に大きな問題があるため、ますますdapper.netに切り替えています。
正常に動作していますが、データをフィルタリングするときに述語を書く快適な LINQish スタイルが恋しいです。
だから私の質問は、述語をの形式でFunc<T, bool>
SQL Server の where 句に変換して、dapper で使用するにはどうすればよいですか?
誰かが以前にこれを行ったに違いないと思いますか、それともすべてのダッパーユーザーがSQLステートメントをハンドコーディングしているのでしょうか?
タイトルが示すように、SQL Server の LINQ2SQL プロバイダーを呼び出すオプションでしょうか?
基本的に、動的 linq の逆のようなものを探しています。
.net - Dapper: コマンドを複数回実行し、linq と ToArray を実行する
dapper docsによると、次のように書くことができます
使ってみた
ただし 、Dapper コードで例外「DynamicMethod の型所有者が無効です」が発生する
あまりにも巧妙なコードを書こうとしているのですか、それとも何か他のことを誤解していますか? バグに遭遇しましたか?
Win7 で Dotnet3.5 を実行しています。
c# - Dapper.NETでCommandTimeoutを調整しますか?
Dapperを介してストアドプロシージャを介してSQLバックアップを実行しようとしています(アプリの残りの部分はDapperを使用しているため、この部分も実行し続けたいと思います)。CommandTimeoutが作動するまでは問題なく動作します。
私が知っている唯一のCommandTimeout設定は、SqlCommandにあります。Dapperを介してこれを設定する方法はありますか?