2017-02-02 2 views
0

Проблема с: Dapper Расширение dbConnection.Get (PersonId)Dapper Расширение dbConnection.Get <Object>

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

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

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

data.Persons 
    Pers_Id 
    Pers_Name 

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

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

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

ответ

2

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

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(); 
    } 
} 

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

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

Update:

Другая альтернатива играть с Code Generation and T4 Text Templates

Вот это тривиальный example

+0

Есть ли способ автогенерировать или устанавливать правила для настраиваемого картографа? У меня есть, может быть, 100 таблиц, и я не хочу создавать много карточек ... – doper1234

+0

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

Смежные вопросы