dapper множит таблицу, когда определено иначе в ClassMapper

Во время вставки ошибки процесса с ошибкой неправильного имени. Даппер пытается придумать имя таблицы.

Класс mapper находится в том же пространстве имен, что и модель, названный в честь таблицы, и в модели отсутствуют какие-либо другие аннотации, простой POCO.

  //record is an instance of DMPERQ.cs
  var rqId = conn.Insert<DMPERQ>(record);

Ошибка:

  Invalid object name 'DMPERQs'

Класс картографа:

   public class DMPERQMapper: ClassMapper<DMPERQ>
   {

        public DMPERQMapper(){
           Table("DMPERQ");
           Map(m => m.RQID).Column("RQID").Key(KeyType.Identity);
           AutoMap();
        }

    }

1 ответ

Я думаю, что проблема в том, что ваш пользовательский класс никогда не вызывается. Вы можете установить точку останова, и вы обнаружите, что она никогда не будет достигнута.

Я попробовал это, потому что DapperExtensions автоматически создает свойство, оканчивающееся на "id" и имеющее тип int, в поле идентификатора (даже если это не так), а затем исключает это свойство из вставки sql. Это приводит к ужасной ошибке sql, если база данных ожидает, что значение будет предоставлено.

Я сталкивался с этим в составных таблицах, которые имеют составной ключ из двух внешних ключей, но не имеют первичного идентификационного ключа. Технически, это то, как вы должны делать эти типы таблиц, но DapperExtensions это совсем не нравится.

Проблема заключается в том, как защитить и прикрепить ссылку на экземпляр ClassMapper, и я не видел в чьей-либо документации ничего, что указывало бы, как это сделать.

В итоге я изменил DapperExtensions, чтобы устранить проблему, с которой столкнулся, и вам, возможно, придется это сделать.

Долгосрочная проблема заключается в следующем: как прикрепить пользовательское сопоставление к DapperExtensions и куда вы помещаете код?

Некоторые решения указывают на добавление файла global.asax, но это не работает.

Другие вопросы по тегам