0

我有以下(局部的)模型:存储对象[]如在功能NHibernate柱

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

我想存储args[]如在表中的单个列中,服用的事实提前该格式参数通常是可序列化的或者可以先被转换成字符串。

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

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

+0

您是否尝试过此问题中的建议:http://stackoverflow.com/questions/4584170/binary-blob-truncated-to-8000-bytes-sql-server-2008-varbinarymax – 2013-05-02 03:36:56

回答

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