Dapper.Rainbow Database.Insert-从对象中删除ID-如何覆盖?

时间:2018-07-31 08:55:00

标签: c# dapper dapper-rainbow

我正在使用Dapper和Dapper.Rainbow作为我的ORM(只需从EF切换到它即可)。

我的表具有与ID相同的Guid / 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();
        }

因此,尽管该方法被标记为虚拟方法,但我应该如何覆盖它呢?

所有其他必需的方法(例如GetParamNames)都是内部方法,那么最好是克隆并运行我自己的Dapper.Rainbow版本吗?

1 个答案:

答案 0 :(得分:0)

Dapper.Rainbow有几个limitations

  • 不支持组合键映射。
  • 所有表的标识列名称必须称为ID。

它期望ID为身份,因此将其删除...

或者,您可以尝试Dapper-Extensions,它同时支持Integer和Guid主键。或者只是使用没有其他CRUD扩展名的Dapper ...