在Fluent NHibernate中存储一个对象[]作为列

本文关键字:一个对象 Fluent NHibernate 存储 | 更新日期: 2023-09-27 18:11:40

我有以下(部分)模型:

class LogMessage{
    string Format;
    object[] args;
}

我希望将args[]存储为表中的单列,这是考虑到格式参数通常是可序列化的,或者可以先验地转换为字符串

我不想存储格式化的消息,我想分别存储格式和参数(这有几个优点)。

我如何告诉Fluent NHibernate使用BLOB类型来存储该列,并在持久化实体时执行简单的二进制序列化/反序列化?

在Fluent NHibernate中存储一个对象[]作为列

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 } }
    }
}