Пример:
public class ContactMap : ClassMap<Contact>
{
public ContactMap()
{
WithTable("ida_contact");
Id(x => x.ID, "ida_contact_id").WithUnsavedValue(0).GeneratedBy.UuidHex("");
Map(x => x.FirstName);
Map(x => x.Surname);
Map(x => x.Address1, "dm_address_1");
Map(x => x.Address2, "dm_address_2");
Map(x => x.Address3, "dm_address_3");
Map(x => x.Postcode, "dm_postcode");
Map(x => x.City, "dm_city");
Map(x => x.CountryCode, "dm_countrycode");
Map(x => x.PhoneMobile, "phone_mobile");
Map(x => x.PhoneHome, "phone_home");
Map(x => x.Email);
Map(x => x.DOB);
Map(x => x.SMSAccept, "sms_accept");
Map(x => x.EmailAccept, "email_accept");
Map(x => x.UserName);
Map(x => x.Password);
}
}
Это сопоставление классов носит ограничительный характер, поскольку таблица будет выглядеть совершенно иначе в некоторых других моих проектах.
То, что я склонен сделать, это сопоставить словарь, в котором каждый элемент в словаре представляет столбец в таблице, таким образом, он будет на 100% динамичен в отношении добавления столбцов в базу данных, и мне потребуется только обновите файл сопоставления с какой таблицей использовать, если я интегрируюсь с другой системой.
Это также потребовало бы таблицы с метаданными для предоставления типа и информации о проверке, чтобы удовлетворить требования для моего домена.
Есть ли способ сделать это отображение в fluent-nhibernate?
Некоторая форма
public class ContactMap : ClassMap<IDictionary<string, object>>
{
WithTable("Current_contactTable");
}
Я думаю, что решение пахнет немного плохо, поэтому, если у кого-то есть решение с более строгой типизацией или ссылка на одно имя, я бы хотел его услышать;).