2016-02-08 3 views
3

Я именование моих таблиц MYSQL и столбцов, используя символы подчеркивания:Как связать имена таблиц/столбцов подчеркивания автоматически с помощью Dapper-Extensions?

this_is_a_table следует сопоставить: ThisIsATable

this_is_a_column следует сопоставить: ThisIsAColumn

Щеголеватые может обрабатывать это отображение, если я установить:

DefaultTypeMap.MatchNamesWithUnderscores = true; 

Есть ли способ включить это в Dapper-Extensions, чтобы он автоматически отображал undescore?

+1

переписаны название, чтобы сформировать вопрос (более читаемым для поиска результатов) и некоторый код форматирования –

+0

Слишком плохо, что расширение не обрабатывает отображение, как в родительском пространстве имен, потому что 'DefaultTypeMap.MatchNamesWithUnderscores = true;' работает так хорошо. Это приводит к излому в общем репозитории, который я создаю для проекта. Я считаю, что сопоставление имен таблиц отлично работает, если вы украшаете класс '[Table (" this_is_a_table ")]'. – secretwep

+0

@secretwep Вот как я решаю его сегодня при создании общего репо. Но, как вы сказали, MatchNamesWithUnderscores работает так хорошо. –

ответ

1

Это довольно сложно, вам просто нужно создать custom mapping. Вот пример:

Создать таблицу:

create table hello_world 
(
    Id int not null, 
    Value_Column varchar(max) 
) 

Тест:

public class World 
{ 
    public int Id { get; set; } 
    public string Value { get; set; } 
} 

public class WorldCustomMapper : ClassMapper<World> 
{ 
    public WorldCustomMapper() 
    { 
     base.Table("hello_world"); 
     Map(f => f.Id).Column("Id"); 
     Map(f => f.Value).Column("Value_Column"); 
    } 
} 

[TestFixture] 
public class Class1 
{ 
    [Test] 
    public void TestMappping() 
    { 
     var conn = new SqlConnection(@"Data Source=.\sqlexpress; Integrated Security=true; Initial Catalog=mydb"); 
     conn.Open(); 

     var record = new World 
     { 
      Id = 1, 
      Value = "Hi" 
     }; 

     conn.Insert(record); 

     var result = conn.Get<World>(1); 

     Assert.That(result.Value, Is.EqualTo("Hi")); 

    } 
} 
+0

Извините, что не упоминайте об этом в главном сообщении, но я хочу, чтобы у вас было возможность решить эту автоматическую картографию для всех объектов. И используйте только специальные утилиты класса. Обновлено мое сообщение. –

+0

Я не знаю о такой возможности. По умолчанию ваши имена свойств POCO должны соответствовать каждому имени столбца в таблице, иначе, настраиваемое сопоставление. –