У меня есть простое веб-приложение ASP.NET MVC, которое использует NHibernate с функцией автоматического сопоставления FluentNHibernate для доступа к данным. Я столкнулся со сценарием, в котором я хотел бы, чтобы NHibernate сохранял некоторые классы в виде двоичных данных.
Например, у меня есть что-то похожее на это:
public class User
{
...
// This field will be persisted
public virtual byte[] PortraitData { get; set; }
// This method will get me what I'm actually interested in
public virtual Image GetPortrait()
{
return SerializationHelper.Deserialize<Image>(PortraitData);
}
}
(Я оставляю реализацию класса SerializationHelper
на воображение читателя. Он не делает ничего сложного, просто сериализует и десериализует данные в байтовые массивы и обратно.)
Я хотел бы изменить приведенный выше код на это:
public class User
{
...
public virtual Image Portrait { get; set; }
}
Итак, в основном я хочу сказать (Fluent)NHibernate, что он должен сохранять некоторые классы (указанные мной), сериализуя их в двоичное поле с именем фактического свойства.
(В приведенном выше случае я хотел бы, чтобы он сериализовать Image
в поле varbinary
с именем Portrait
.)
Фактический сценарий, который у меня есть, немного сложнее, чем этот, но этот пример очень хорошо демонстрирует, чего я хочу достичь. (Значение: класс System.Drawing.Image
— не единственный, сериализация которого меня интересует.)
Я знаю, что во Fluent или в самом NHibernate должна быть какая-то конфигурация, позволяющая сделать именно это, но я не мог этого понять. Не могли бы вы рассказать мне, как это сделать?
Заранее спасибо за помощь!