我的C#类中有一个字节数组,需要使用NHibernate将其保存到SQL Server 2005数据库中。我应该为列使用什么SQL数据类型,以及如何使用NHiberante为我做持久性?如果答案是自定义的NHibernate类型,是否有任何示例代码可以执行此操作?
将字节数组转换为字符串并将其保存在varcahr列中会更容易吗?
答案 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;
}