Мне интересно, как сохранить свойство, которое зависит как от обычных постоянных свойств (например, string, int), так и от некоторых собственных пользовательских преобразований.
Например, предположим, у меня есть
class A
{
public int Id {get; set;}
public string SomeString {get; set;}
public object SpecialProperty {get; set;}
}
предположим, что для сохраняющегося SpecialProperty требуется чтение SomeString и, в зависимости от его значения, создание некоторого байта [], который затем можно сохранить в базе данных.
Моей первой мыслью было использование IUserType, но этот метод NullSafeGet (IDataReader rs, string [] names, владелец объекта) вызывается до (или фактически во время) SomeString сохраняется (или нет), поэтому он установлен.
Моя вторая мысль состояла в том, чтобы использовать ICompositeUserType и некоторые довольно запутанные настройки, используя обертки.
Моя третья мысль заключалась в том, что, возможно, я смогу реализовать ILifecycle и подключить метод OnLoad (). Но если бы я хотел сделать это, мне нужно было бы создать отдельное свойство для полезной нагрузки byte [], которое я не хочу хранить. Это, конечно, кажется самым простым в реализации, но также и несколько не элегантным.
, например
class A : ILifecycle
{
public int Id {get; set;}
public string SomeString {get; set;}
public object SpecialProperty {get; set;}
private byte[] payloadData { get; set; }
public void OnLoad(ISession s, object id)
{
SpecialProperty = customIn(SomeString, payloadData);
payloadData = null;
}
static object customIn(string a, byte[] payload)
{
// ...
}
}
Кто-нибудь знает более простой и, возможно, более краткий способ?