DapperマイクロORM、データベースに依存しないMySql Guid型

c# dapper mysql orm sqlite

質問

私はペットプロジェクトでDapperを試しています。私はSQLiteを使ってすべてのテストとMySqlを "プロダクション"として実行しています。しかし、私はDapperをデータベースに不可知論的な状況に対処するための最良の方法を確信していません。

私が持っている特定の問題は、主キーのためにGUID型サポートしいない MySqlです。したがって、 varchar(40)を型として使用しています(SQLiteはGUIDである一意の識別子をサポートしています)。 MySqlデータベースから選択しようとすると、以下のようなジェネリックリポジトリを持っていると問題が発生します。なぜなら、varchar型はguid型と一致しないため、Idプロパティの型はGuidであり、Dapperは " Error parsing column 10 "を投げるからです。

Idプロパティをguidからintに変更した場合、GetById内の生のSQLはさらに複雑になり、どのように記述するかもわかりません。 1.トランザクションの開始、2.挿入、3.最後に挿入されたIDの選択とそれを返す。では、データベースタイプがmysqlの場合はlast_insert_idを使用する 、sqliteの場合はlast_insert_rowidを使用しますか?生のSQL構文がデータベースとはかなり異なるため...

public IEnumerable<T> GetById(Guid id) //convention: Id is always of type Guid.
{
  return UnitOfWork.DbConnection.Query<T>(
      string.Format(
        "select * from {0} where Id = @Id", typeof (T).Name), new {Id = id});
}

他の例は、(特にページングのために)返される行数を制限することです。だから私はどのようにデータベースの無関係な生のSQLクエリをダッパーで書くつもりですか?そして、私の状況では、Dapperは適切ではないでしょうか?おそらく、私はここで同じ古いNHibernateを使用する必要があります。助言がありますか?私はそれを間違っているのですか?ありがとう!

人気のある回答

MySQLの主キーのデータ型としてCHAR(36)を使用しようとすると、MySQlコネクタによってGuidに変換されます.MySQLコネクタバージョン6.3.4を使用しています。 Dapperと同様に動作します。



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow