我想知道如何保持一个属性,这取决于常规持久属性(例如,字符串,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,object owner)在(或实际上,在)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)
{
// ...
}
}
有没有人知道一个更容易和可能更简洁的方式?