C# Nhibernate无法反序列化可序列化属性
我在sql类中有一个表,它必须包含两列,一列是ID,另一列是fImage。fImage列的数据类型为Image。我正在使用nhibernate加载所有图像,并希望将其绑定到图片框控件中。但是,当使用nhibernate读取数据时,我们遇到异常,nhibernate无法反序列化可序列化属性 我浏览了stackoverflow和google上的一些链接,但似乎什么都不适合我 这里我给出了hbm文件和类文件的示例C# Nhibernate无法反序列化可序列化属性,c#,nhibernate,nhibernate-mapping,C#,Nhibernate,Nhibernate Mapping,我在sql类中有一个表,它必须包含两列,一列是ID,另一列是fImage。fImage列的数据类型为Image。我正在使用nhibernate加载所有图像,并希望将其绑定到图片框控件中。但是,当使用nhibernate读取数据时,我们遇到异常,nhibernate无法反序列化可序列化属性 我浏览了stackoverflow和google上的一些链接,但似乎什么都不适合我 这里我给出了hbm文件和类文件的示例 namespace BlackOpsP2.Core.Domain.ARModule {
namespace BlackOpsP2.Core.Domain.ARModule
{
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
/// <summary>
/// Documentation for the tARReportLogo.
/// </summary>
public partial class tARReportLogo : DomainObject<System.Guid>
{
#region Constructor
/// <summary>
/// Initializes a new instance of the <see cref="tARReportLogo"/> class.
/// </summary>
public tARReportLogo()
{
}
/// <summary>
/// Initializes a new instance of the <see cref="tARReportLogo"/> class.
/// </summary>
/// <param name="fReportLogoID">The Payment Type ID.</param>
public tARReportLogo(System.Guid fReportLogoID)
{
this.ID = fReportLogoID;
}
#endregion
#region Properties
/// <summary>
/// Gets or sets ReportLogoID.
/// </summary>
public virtual System.Guid fReportLogoID { get; set; }
/// <summary>
/// Gets or sets Image ID.
/// </summary>
public virtual System.Guid fImageID { get; set; }
/// <summary>
/// Gets or sets Image Name.
/// </summary>
public virtual string fImageName { get; set; }
/// <summary>
/// Gets or sets Image Value.
/// </summary>
public virtual Image fImageValue { get; set; }
#endregion
#region Methods
/// <summary>
/// Joins a first name and a last name together into a single string.
/// </summary>
/// <returns>The hash code.</returns>
public override int GetHashCode()
{
return ID.GetHashCode();
}
#endregion
}
}
名称空间BlackOpsP2.Core.Domain.ARModule
{
使用制度;
使用System.Collections.Generic;
使用系统文本;
使用系统图;
///
///tARReportLogo的文档。
///
公共部分类tARReportLogo:DomainObject
{
#区域构造函数
///
///初始化类的新实例。
///
公共交通标志()
{
}
///
///初始化类的新实例。
///
///付款类型ID。
公共tARReportLogo(System.Guid fReportLogoID)
{
this.ID=fReportLogoID;
}
#端区
#区域属性
///
///获取或设置ReportLogoID。
///
公共虚拟系统.Guid fReportLogoID{get;set;}
///
///获取或设置图像ID。
///
公共虚拟系统.Guid fImageID{get;set;}
///
///获取或设置图像名称。
///
公共虚拟字符串fImageName{get;set;}
///
///获取或设置图像值。
///
公共虚拟映像fImageValue{get;set;}
#端区
#区域方法
///
///将名字和姓氏合并为一个字符串。
///
///散列码。
公共覆盖int GetHashCode()
{
返回ID.GetHashCode();
}
#端区
}
}
这是hbm文件
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping assembly="BlackOpsP2.Core" namespace="BlackOpsP2.Core.Domain.ARModule" xmlns="urn:nhibernate-mapping-2.2">
<class name="tARReportLogo" table="tARReportLogo" lazy="true" >
<id name="fReportLogoID">
<generator class="guid" />
</id>
<property name="fImageID">
</property>
<property name="fImageName" >
</property>
<property name="fImageValue" type="Serializable" length="2147483647">
</property>
</class>
</hibernate-mapping>
我使用的是nhibernate版本3.3
谢谢,将您的C#属性更改为字节[]
public partial class tARReportLogo : DomainObject<System.Guid>
{
...
public virtual byte[] fImageValue { get; set; } // image as a byte array
...
}
公共部分类tARReportLogo:DomainObject
{
...
公共虚拟字节[]fImageValue{get;set;}//作为字节数组的图像
...
}
您的映射不需要比这个更多的东西
<property name="fImageValue" length="2147483647" />
您可以在C#中进行的任何其他转换(到映像实例或其他任何转换)。NHiberante将把
byte[]
映射到SQL Serverimage
{“输入流不是有效的二进制格式。起始内容(以字节为单位)是:42-4D-DE-19-00-00-00-00-00-00-00-00-36-04-00-00-28-00-00-00…”当我们将类型从image更改为byte[]时,我们无法将image与picturebox control绑定。我正在使用数据绑定属性绑定PictureBox控件中的图像。它只是一个DB部分。DB图像
类型到C#type字节[]
的映射。您可以将其标记为受保护:protectedvirtualbyte[]fImageValue{get;set;}
并引入public-Image-ImageValue{get{..}set{..}
,它将包装对fImageValue的调用并提供转换。有道理?