2014-10-29 3 views
1

У меня есть несколько классов, которые должны иметь одно или два свойства (из нескольких десятков), сопоставленные столбцу таблицы, имеющей другое имя столбца. Я не хочу отображать все свойства, когда только два отличаются от имен столбцов в базе данных.Использование CustomPropertyTypeMap для сопоставления определенных свойств

Я не могу найти приличные документы во всех вариантах отображения, которые могут быть использованы с CustomPropertyTypeMap, все они просто отображают отображение всего объекта с помощью CustomPropertyTypeMap (также как класс тестов Dapper). Когда я использую следующее:

// Set up custom repository parameter mappings. 
var map = new CustomPropertyTypeMap(typeof(T), 
    (type, columnName) => type 
     .GetProperties() 
     .FirstOrDefault(
      prop => prop.GetCustomAttributes(false) 
       .OfType<RepositoryParameterAttribute>() 
       .Any(attr => attr.ParameterName == columnName))); 

Dapper.SqlMapper.SetTypeMap(typeof(T), map); 

// Query the database 
items = await databaseConnection.QueryAsync<T>(
    storedProcedure, 
    itemParameters, 
    commandType: CommandType.StoredProcedure, 
    transaction: transaction); 

Свойства, которые не оформлены с обратным RepositoryParameterAttribute нуль (или 0). Могу ли я использовать это для отображения только определенных свойств и позволить Dapper увлажнять оставшиеся, не украшенные атрибуты, или мне придется делать что-то обычай?

Спасибо.

ответ

0

Dapper.FluentMap позволяет настраивать сопоставления из свойств POCO в таблицы столбцов. Он делает это, используя CustomPropertyTypeMap и используя DefaultTypeMap как резерв.

Он доступен как NuGet package, но вы также можете взглянуть на source и посмотреть, как я реализовал CustomerPropertyTypeMap и создать для вас более простую реализацию.

+0

Спасибо, я посмотрю. На данный момент я использую [это решение] (http://stackoverflow.com/questions/8902674/manually-map-column-names-with-class-properties), но для начала мне нужно немного отражения. Мои запросы относятся к общему методу, поэтому я не знаю заранее на уровне сервиса, что нужно для отображения без отражения. Я посмотрю на Dapper.FluentMap и посмотрю, разрешит ли это это! –

+0

Dapper.FluentMap фактически использует предлагаемое там решение резервного решения, это просто более полное решение с классами сопоставления и без проблем с рефлексией. –

+0

Ницца, оцените помощь. Я сдержу его! –

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