2009-07-07 3 views
8

C# 클래스에 바이트 배열이 있고이를 NHibernate를 사용하여 SQL Server 2005 데이터베이스에 유지해야합니다. 열에 어떤 SQL 데이터 형식을 사용해야합니까? 그리고 NHiberante를 사용하여 지속성을 얻으려면 어떻게해야합니까? 대답은 사용자 지정 NHibernate 형식 인 경우이를 수행 할 주위에 어떤 샘플 코드가 있습니까?NHibernate를 사용하여 SQL 데이터베이스에 바이트 배열을 저장하는 가장 좋은 방법은 무엇입니까?

바이트 배열을 문자열로 변환하고 varcahr 열에서 쉽게 유지할 수 있습니까?

+1

됩니다 에 대해 말하다? 수백 바이트는 varbinary 저장소를 사용하여 바이트 []로 완벽하게 작동합니다. – sisve

+0

나는이 똑같은 것을 궁금해했다. 그러나 나의 경우에는 크기가 실제로 눈살을 찌푸린 채로 저장하는 것을 알고있다. –

+0

바이트 배열의 길이는 2,000-3,000입니다 –

답변

2

BinaryBlob은 적절한 VarBinary 열을 생성해야합니다.

0

또 다른 방법으로 그림과 같이 매우 큰 파일에 맞게 동적으로 할당하는 mssql의 "image"열 유형을 사용하는 을 예로들 수 있습니다.

hbm.xml :

<property name="Photo" column="Photo" type="BinaryBlob" not-null="true"></property> 

클래스 속성 :

private byte[] _photo; 

public virtual byte[] Photo 
{ 
    get { return _photo; } 
    set { _photo = value; } 
} 

테스트는 NHibernate에 세션 얻기 위해 도우미를 사용하여 어떻게 큰 배열 우리가

Image image = Image.FromFile(@"C:\Documents and Settings\someuser\Desktop\logoTop.gif"); 
    byte[] imageByte; 
    using (MemoryStream ms = new MemoryStream()) 
    { 
    image.Save(ms, ImageFormat.Gif); 
    imageByte = ms.ToArray(); 
    } 

    NHSession sessionManager = new NHSession(); 
    using (ISession session = sessionManager.GetSession()) 
    using (ITransaction tx = session.BeginTransaction()) 
    try 
    { 
     MyPhoto photo = new MyPhoto(); 
     photo.Photo = imageByte; 
     session.Save(photo); 
     session.Refresh(photo); 
     Console.WriteLine(photo.EverifyPhotoId); 
     tx.Commit(); 
    } 
    catch (HibernateException) 
    { 
     if (tx.IsActive) 
     tx.Rollback(); 
     throw; 
    } 
관련 문제