我想知道如何保持一個屬性,這取決於常規持久屬性(例如,字符串,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)
{
// ...
}
}
有沒有人知道一個更容易和可能更簡潔的方式?