Я работаю с NHibernate 3.3 и использую систему сопоставления по коду. Таблица/база данных, с которыми я работаю, будет доступна только для чтения для моего приложения.
Проблема, с которой я столкнулся, заключается в том, что мой столбец первичного ключа хранится как двоичное поле в SQL Server. Мне нужно прочитать это как строку, и, к сожалению, я не могу изменить таблицу (включая добавление индексированных представлений).
На данный момент я пытаюсь использовать IUsertype для преобразования значения из двоичного в строковое. Однако я застрял, пытаясь установить тип столбца Id в объекте для использования IUserType.
Мне удалось успешно сделать это для обычных свойств, как в приведенном ниже примере, но я не могу понять, как это сделать для столбцов идентификаторов и столбцов внешнего ключа.
public class ExampleEntity
{
public virtual String MyIdColumn { get; set; }
public virtual Country Country { get; set; }
}
public class ExampleEntityMap : ClassMapping<ExampleEntity>
{
public ExampleEntityMap()
{
Table("Table");
Id(i => i.Id, map =>
{
map.Column("MyIdColumn");
map.Type(???);
});
Property(i => i.Country, map =>
{
map.Column("Country");
map.Type<CountryEnumUserType>();
});
}
}
- Возможно ли это с картированием по коду NH3.3?
- Должен ли я вместо этого реализовать IIdentifierType, чтобы добиться того, что IUserType делает для поля Id?
- Может ли преобразователь NHibernate добиться того, что я делаю?
- Есть ли другой способ решить эту проблему? Помимо извлечения данных и их преобразования в C#, так как мне приходится делать это для многих столбцов в более чем дюжине таблиц.
Спасибо