我有以下(部分)模型:
class LogMessage{
string Format;
object[] args;
}
我希望将args[]
存储为表中的单个列,事先知道格式参数通常是可序列化的,或者可以转换为字符串 a priori 。
我不想存储格式化的消息,我想分别存储格式和args(这有几个优点)。
如何在持久化实体时告诉Fluent NHibernate使用BLOB类型存储该列并执行简单的二进制序列化/反序列化?
答案 0 :(得分:1)
Map(x => x.Args).CustomType<ObjectArrayType>();
class ObjectArrayType : IUserType
{
public object NullSafeGet(IDBReader reader, string[] names, object owner)
{
byte[] bytes = NHibernateUtil.BinaryBlob.NullSafeGet(reader, names[0]);
return Deserialize(bytes);
}
public void NullSafeSet(IDBCommand cmd, object value, int index)
{
var args = (object[])value;
NHibernateUtil.BinaryBlob.NullSafeSet(cmd, Serialize(args), index);
}
public Type ReturnType
{
get { return typeof(object[]); }
}
public SqlType[] SqlTypes
{
get { return new [] { SqlTypeFactory.BinaryBlob } }
}
}