0

我将 Dapper 和 Dapper.Rainbow 用于我的 ORM(只是从 EF 切换到它)。

我的表有 Guids/uniqueidentifiers 作为 ID。

我正在使用 Dapper Rainbow 进行插入,它正在删除 Id 参数。

请参阅插入方法的第 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 版本吗?

4

1 回答 1

0

Dapper.Rainbow 几乎没有限制

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

它希望 Id 是身份,所以它会删除它们......

作为替代方案,您可以尝试Dapper-Extensions,它同时支持 Integer 和 Guid 主键。或者只使用 Dapper 而不需要额外的 CRUD 扩展......

于 2018-07-31T14:12:03.837 回答