Dapper.Rainbow с существующей схемой базы данных

Я пробую Даппер. Мне нравится то, что я видел до сих пор. Для того, чтобы сделать простой CRUD, я использую Dapper.rainbow. Это работает очень хорошо. Однако это работает, только если таблица имеет столбец идентификаторов с именем Id. Имеет смысл иметь такую ​​базу данных, но я не могу попросить изменить имя столбца в базе данных, просто чтобы использовать Dapper. Чтобы быть более понятным, я работаю с базой данных, как Northwind Db. Имя таблицы повторяется везде в столбце Id.

Чтобы справиться с этим, я изменил код Dapper.Rainbow, как показано ниже:

   public T Get(TId id,string idColumnName="Id")
        {
            return database.Query<T>("select * from " + TableName + " where               "+idColumnName+" = @id", new { id }).FirstOrDefault();
        }

Есть ли лучший способ справиться с этим, например, сопоставление столбцов / аннотации или что-то совершенно другое?

Я читал такие вопросы

Вручную сопоставьте имена столбцов со свойствами класса

Dapper.Rainbow VS Dapper.Contrib

(Я столкнулся с подобной небольшой проблемой с Dapper.Contrib, я спрошу об этом отдельно).

Обновление - Не уверен, что ответы применимы к моей проблеме Dapper.Rainbow здесь (Atleast, я не вижу, как).

Спасибо за помощь заранее!

1 ответ

Решение

У меня была похожая проблема. Существующие расширения Dapper не соответствуют моему идеальному шаблону. Я хотел простых операций CRUD с умными настройками по умолчанию без каких-либо дополнительных. Я также хотел иметь модели с дополнительными свойствами, которые не отображаются непосредственно в базу данных. Например - свойство FullName, которое объединяет FirstName и LastName в своем геттере - и не добавляет FullName в операторы Insert и Update.

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

Наконец, я хотел, чтобы имя таблицы совпадало с именем класса по умолчанию, но разрешить переопределение атрибутом.

В итоге я написал собственное расширение для Dapper, которое решает эти проблемы. Это на Github и Nuget. Надеюсь, это будет полезно для вас.

https://github.com/ericdc1/Dapper.SimpleCRUD

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