0

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 の独自のバージョンを複製して実行するだけでよいのでしょうか?

4

1 に答える 1

0

Dapper.Rainbow にはいくつかの制限があります。

  • 複合キー マッピングはサポートされていません。
  • すべてのテーブルの ID 列名は Id と呼ばれる必要があります。

Id は ID であると想定されるため、ID を削除します...

別の方法として、Integer と Guid の主キーの両方をサポートするDapper-Extensionsを試すことができます。または、追加の CRUD 拡張機能なしで Dapper を使用するだけです...

于 2018-07-31T14:12:03.837 に答える