使用NHibernate在SQL数据库中存储字节数组的最佳方法是什么?

时间:2009-07-07 15:45:14

标签: c# sql sql-server sql-server-2005 nhibernate

我的C#类中有一个字节数组,需要使用NHibernate将其保存到SQL Server 2005数据库中。我应该为列使用什么SQL数据类型,以及如何使用NHiberante为我做持久性?如果答案是自定义的NHibernate类型,是否有任何示例代码可以执行此操作?

将字节数组转换为字符串并将其保存在varcahr列中会更容易吗?

2 个答案:

答案 0 :(得分:2)

BinaryBlob应为您生成适当的VarBinary列。

答案 1 :(得分: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;
    }