Шикарные расширения dbConnection.Get‹Object›

Проблема с: Dapper Extensions dbConnection.Get(personId)

У меня есть модель под названием Person:

Person
{
    public int PersonId { get; set; }
    public string Name { get; set; }
}

В базе у меня есть эта таблица:

data.Persons
    Pers_Id
    Pers_Name

Когда я пробую это без какого-либо пользовательского сопоставления, я получаю сообщение об ошибке «Недопустимое имя объекта« Человек »». Я считаю, что это проблема сопоставления, потому что, когда я полностью сопоставляю модель с префиксом «Pers_» и использую «data.Persons», Get работает.

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

У меня также все уже сопоставлено с Entity framework. Есть ли возможность получить настройки карты из Entity DbModelBuilder?


person doper1234    schedule 02.02.2017    source источник


Ответы (1)


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

public class MyModelMapper : ClassMapper<MyModel>
{
    public MyModelMapper()
    {

        //use different table name
        Table("table_name");

        //use a custom schema
        Schema("not_dbo_schema"); 

        //have a custom primary key
        Map(x => x.ThePrimaryKey).Key(KeyType.Assigned);

        //Use a different name property from database column
        Map(x=> x.Foo).Column("Bar");

        //Ignore this property entirely
        Map(x=> x.SecretDataMan).Ignore();

        //optional, map all other columns
        AutoMap();
    }
}

Альтернативой является использование Dapper и просто написание встроенных запросов:

connection.Query("select * from foo.table where myId = {myId}", new {myId})

Обновление:

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

Вот тривиальный пример

person Void Ray    schedule 02.02.2017
comment
Есть ли способ автоматически сгенерировать или установить правила для пользовательского картографа? У меня может быть 100 таблиц, и я не хочу создавать столько картографов... - person doper1234; 06.02.2017
comment
Я обновляю ответ. Я не знаю ничего, что могло бы сделать это за вас, но вы можете написать свой собственный генератор кода. - person Void Ray; 06.02.2017