Dapper micro ORM,數據庫不可知和MySql Guid類型

c# dapper mysql orm sqlite

我正在試驗寵物項目的Dapper 。我使用SQLite運行所有測試和MySql用於“生產”。但是我不確定如何最好地使用Dapper來處理數據庫不可知的情況。

我遇到的特殊問題是MySql 不支持主鍵的Guid類型 ,因此我使用varchar(40)作為類型(SQLite支持唯一標識符,這是一個guid)。所以,如果我有一個通用的存儲庫,問題就出現了,我在嘗試從MySql數據庫中選擇時會遇到麻煩。因為Id屬性的類型是Guid,Dapper將拋出“ Error parsing column 10 ”,因為varchar類型與guid類型不匹配。

如果我將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});
}

其他示例是限制返回的行數(尤其是對於分頁)等等。那我怎麼用dapper編寫數據庫無關的原始sql查詢?也許在我的情況下Dapper不合適?也許我應該在這裡使用相同的舊NHibernate。有什麼建議麼?我做錯了嗎?謝謝!

熱門答案

嘗試使用CHAR(36)作為MySQL中主鍵的數據類型,這通過MySQl連接器轉換為Guid - 我使用的是MySQL連接器版本6.3.4。也適用於Dapper。



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因