0

I는 다음의 (부분) 모델이있다 : I는 사실을 미리 촬영 테이블에서 단일 열로 args[]를 저장할저장하는 오브젝트 [] 유창함 NHibernate에의 열로

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

그런 형식 인수 일반적으로 직렬화 가능하거나 문자열 으로 사전 변환으로 변환 할 수 있습니다.

형식화 된 메시지를 저장하고 싶지 않습니다. 형식과 args를 별도로 저장하고 싶습니다. (몇 가지 장점이 있습니다).

플루 언트 NHibernate가 엔티티를 영속화 할 때 BLOB 타입을 사용하여 해당 컬럼을 저장하고 간단한 바이너리 직렬화/비 직렬화를 수행하도록 어떻게 말할 수 있습니까?

+0

당신이이 질문에 제안 무엇을 시도 해 봤나 : http://stackoverflow.com/questions/4584170/binary-blob-truncated-to-8000-bytes-sql-server-2008-varbinarymax –

답변

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