私は現在、Dapperについて学んでいます。私はここや他の場所(これを含む)をたくさん検索しましたが、疑問に対する具体的な答えを見つけることができませんでした:
Dapper は一般的な SQL 方言を使用していますか、それとも DB エンジンに固有のものですか? つまり、基盤となるデータベース エンジンで期待される SQL 構文を使用しているということですか? 最初は、十数件以上の例を読んだ後、SQL クエリは一般的なものだと思っていましたが、現在 PostgresSQL ODBC を試していると、構文とパラメーターに問題が発生しました。
この例の POCO クラスを使用すると ...
public class CardType {
//Autoincremented Key
public int Id { get; set; }
public string Type { get; set; }
public string Description { get; set; }
}
...次の行は機能しません:
_connection.Execute(@"INSERT cardtypes (type, description) VALUES (@Type, @Description)", cardType);
まず、テーブルを指定する前に "INTO" 句が必要なため、この行は ODBC 例外をスローします。また、パラメーターも機能しません。間違っていなければ、PostgresSQL パラメーターは「?」で設定されているためです。"@keyword" ではなく記号を使用してください。GitHubページで、これを見つけることができます。
Dapper には DB 固有の実装の詳細はありません。SQLite、SQL CE、Firebird、Oracle、MySQL、PostgreSQL、SQL Server など、すべての .NET ADO プロバイダーで機能します。
だから私はこれで迷っています。:) 多くの実験を行った後、すべての PostgresSQL を配置すると、期待どおりに機能することがわかりました。たとえば、次のすべてのケースが機能しました。
//Manually parameters
var query = @"INSERT INTO cardtypes (type, description) values ('Administrator', 'The Boss')";
_db.Execute(query);
//Dynamic parameters
var dynamicParameters = new DynamicParameters();
dynamicParameters.AddDynamicParams(new {
cardType.Type,
cardType.Description
});
var query = @"INSERT INTO cardtypes (type, description) values (?, ?)"; //Note the '?' symbol
_db.Execute(query, dynamicParameters);
//Interpolating values
var query = $@"INSERT INTO cardtypes (type, description) values ('{cardType.Type}', '{cardType.Description}')";
_db.Execute(query);
これらの以前のケースはうまくいきました。しかし、SQL クエリが一般的な SQL 方言なのか、特定のデータベース エンジンの方言なのかを理解するのに混乱しています。
また、Dapper.Contrib を試してみましたが、INSERT ステートメントでも失敗します。たとえば、次のようになります。
_db.Insert(new CardType() {
Type = "Administrator",
Description = "The Boss"
});
それも失敗します...奇妙な「[」文字例外。
私が間違っていることは何ですか?
よろしく!