Очень часто бывают ситуации, когда для бизнес-объекта заранее неизвестен полный список полей или этот список часто меняется. И возникает постоянный напряг с поддержанием синхронизации кода, хранимых процедур и таблиц.
Было бы здорово, если бы маппер поддерживал сериализацию списка полей в одно бинарное или xml поле.
Поясню на примере:
public class Person
{
public int Id;
public string FirstName;
public string LastName;
[MapDynamicField("Comments")]
public string ManagerComment; // => в поле "comments"
[MapDynamicField("Comments")]
public string ChiefComment; // => в поле "comments"
[MapDynamicField("Stuff")]
public DateTime BirthDate; // => в поле "stuff"
[MapDynamicField("Stuff")]
public double InternalRating; // => в поле "stuff"
}
Есть класс Person и в нем есть поля, которые 100% будут в релизе и они используются в поисковых запросах к базе уже в самом начале проекта: Id, FirstLast, LastName. А есть поля, которые пока нужны только для хранения контента и они абсолютно точно не используются в DAL и на первых итерациях проекта генерить их все в таблицах и запросах очень накладно по времени. Эти "контентные" поля помечаются атрибутом MapDynamicField и сверытаются в одно поле в таблице БД: ManagerComment и ChiefComment в Comments, а BirthDate и InternalRating в Stuff. При переходе к следующим итерациям с них по необходимости снимается атрибут MapDynamicField и они становятся обычными полями в таблице.
Если бы маппер поддерживал такую возможность, то это бы очень сильно ускоряло процесс разработки (особенно preview-версий для заказчика).