2013-03-19 3 views
1

Мы собираемся перейти на Dapper из EF. Я хотел бы использовать щеголеватое расширение для заполнения моих объектов, как:Расширения Dapper - изменить поле первичного ключа

UserInstance = conn.Get(UserProfile)(RecordID) 

Всех наших столбцов первичных ключей называется RecordId но предваряется Parent_RecordID. Get пытается использовать Parent_RecordID в качестве столбца первичного ключа: «Если несколько свойств заканчиваются идентификатором, расширения Dapper будут использовать первое свойство Id в качестве первичного ключа».

Как я могу изменить это, поэтому он ищет RecordID как мой первичный ключ только для каждой таблицы? Я понимаю, что я могу создать свой собственный mapper для сущности, но я хочу, чтобы это изменение применимо к каждой таблице (их 100 из них) и скорее не создаст картографию для каждого из них.

ответ

5

Вы пытались создать класс сопоставления для объекта?

public class UserProfileMapper : ClassMapper<UserProfile> 
{ 
    public UserProfileMapper() 
    { 
    Table("UserProfile"); 
    Map(f => f.RecordID).Key(KeyType.Identity); 
    ... 
    } 
} 

Не уверен, что класс mapper используется для Get.

+1

Это вроде того, что я хочу, но я хочу, чтобы применить ко всем моим таблицам. Там 100 столов, и я не хочу создавать новый картограф для всех них. –

+2

Вы можете предоставить свой собственный класс сопоставления https://github.com/tmsmith/Dapper-Extensions/wiki/AutoClassMapper – MichaelLipscombe

+0

hm ... Я хочу использовать ClassMapper, но не могу найти его внутри библиотеки. – Sergey

1

Вы можете директива [Key] выше первичного ключа каждой таблицы

+0

Он говорит о расширениях dapper. AFAIK, он не поддерживает директивы/атрибуты. Вместо этого он поддерживает классы сопоставления. –

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