ORMにDapperとDapper.Rainbowを使用しています(EFから切り替えただけです)。
私のテーブルには、ID として Guids/uniqueidentifiers があります。
Dapper Rainbow を使用して挿入を行っていますが、Id パラメータを削除しています。
Insert メソッドの 62 行目を参照してください... https://github.com/StackExchange/Dapper/blob/master/Dapper.Rainbow/Database.cs
/// <summary>
/// Insert a row into the db
/// </summary>
/// <param name="data">Either DynamicParameters or an anonymous type or concrete type</param>
/// <returns></returns>
public virtual int? Insert(dynamic data)
{
var o = (object)data;
List<string> paramNames = GetParamNames(o);
paramNames.Remove("Id");
string cols = string.Join(",", paramNames);
string colsParams = string.Join(",", paramNames.Select(p => "@" + p));
var sql = "set nocount on insert " + TableName + " (" + cols + ") values (" + colsParams + ") select cast(scope_identity() as int)";
return database.Query<int?>(sql, o).Single();
}
メソッドは virtual とマークされていますが、どのようにオーバーライドすればよいのでしょうか?
GetParamNames などの他の必要なメソッドはすべて内部的なものです。Dapper.Rainbow の独自のバージョンを複製して実行するだけでよいのでしょうか?