【问题标题】:Storing an object[] as column in Fluent NHibernate在 Fluent NHibernate 中将 object[] 存储为列
【发布时间】:2013-05-03 22:01:48
【问题描述】:
我有以下(部分)模型:
class LogMessage{
string Format;
object[] args;
}
我想将args[] 存储为表中的单个列,提前了格式参数通常可序列化或可以转换为字符串的事实先验。
我不想存储格式化的消息,我想分别存储format和args(这有几个优点)。
我如何告诉 Fluent NHibernate 使用 BLOB 类型来存储该列并在持久化实体时执行简单的二进制序列化/反序列化?
【问题讨论】:
标签:
c#
serialization
fluent-nhibernate
fluent-nhibernate-mapping
【解决方案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 } }
}
}