这是我关于StackOverflow的第一个问题!
我在我的vb.net项目中使用NHibernate 2 我还使用NHibernate.JetDriver来访问MS Access数据库
我有一个名为tblPeople的表,它有一个名为'PersonImage'的字段,它是'附件'字段类型
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
namespace="BusinessModel" assembly="NHibernateDemo">
<class name="clsPeople" table="tblPeople">
<id name="ID">
<column name="[ID]" sql-type="int" not-null="true" />
</id>
....
<property name="Image">
<column name="[PersonImage]" sql-type="ntext/nvarchar/varbinary/?????" />
<!--varbinary(max)-->
</property>
</class>
</hibernate-mapping>
这是班级
Namespace BusinessModel
Public Class clsPeople
Public Overridable Overloads Property ID() As Integer
Public Overridable Overloads Property Image() As [byte()/String/String/**?????**]
End Class
End Namespace
有关为映射选择哪些数据类型以便从表中获取实际图像的任何想法?
任何正确方向的帮助都会让我感到害怕!
我甚至尝试过使用hibernate 3和Custom Compilled JetDriver,但我也无论我做什么我一直都会遇到错误 无法将String类型的字段列中的值强制转换为Type BinaryBlobType或Byte []或其他 除非我把String放在我得到的地方;分隔的文件名列表,但仅此而已!
答案 0 :(得分:0)
除非确实需要,否则不必指定sql-type。相反,您可以将“type”指定为“String”或“AnsiString”。
其次,我强烈建议您使用NHibernate的最新版本(此刻为3.3.3)。您还可以考虑其他映射类型,例如按代码映射或属性(但远离流畅:) PS。我从freenode IRC找到了你的问题
答案 1 :(得分:0)
好吧,我觉得我足够接近了!
我在hbm.xml中使用此属性
<property name="FileData">
<column name="Image.FileData" />
</property>
我在我的班级clsPeople中使用这个属性
Private _FileData As Byte() Public Overridable Overloads Property FileData As Byte() 得到 返回_FileData 结束了 设置(值为字节())
If value IsNot Nothing Then Try 'get offset to data Dim offsetbytes As Byte() offsetbytes = SubArray(Of Byte)(value, 0, 4) Dim offset = BitConverter.ToInt32(offsetbytes, 0) Console.WriteLine("offset : " & offset) Dim headerBytes() As Byte = SubArray(Of Byte)(value, 0, offset) 'Dim allbytes() As Byte = CType(value, Byte()) Dim header = BitConverter.ToString(headerBytes, 0) Dim databytes(0 To (value.Length - offset) - 1) As Byte Array.ConstrainedCopy(value, offset, databytes, 0, value.Length - offset) Dim img As Image = ObjToImg(databytes) img.Save("c:\" & Κωδικός_Ακινήτου & ".jpg", ImageFormat.Jpeg) Catch ex As Exception End Try End If _FileData = value End Set End Property
我将随时向您发布有关如何在一个/多个附加文件上发挥作用的信息