0

这是我在 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

关于为映射选择什么数据类型以便从表中获取实际图像的任何想法?

任何朝着正确方向的帮助都会让我开心!

我什至尝试使用休眠 3 和自定义编译的 JetDriver,但无论我做什么,我都会不断收到错误无法将 String 类型的字段列中的值转换为 BinaryBlobType 或 Byte [] 类型或其他任何东西,除非我将 String 放在我得到的地方一个 ; 单独的文件名列表,仅此而已!

4

2 回答 2

0

除非确实有必要,否则您不必指定 sql-type。相反,您可以将“类型”指定为“字符串”或“AnsiString”。

其次,我强烈建议您使用 NHibernate 的最新版本(目前为 3.3.3)。您也可以考虑其他映射类型,例如按代码映射或属性(但远离流利的 :)
PS。我从 freenode IRC 找到了你的问题

于 2013-07-08T06:13:10.393 回答
0

好吧,我想我已经足够接近了!

我在我的 hbm.xml 中使用这个属性

  <property name="FileData">
      <column name="Image.FileData" />
    </property>

我在我的班级 clsPeople 中使用这个属性

Private _FileData As Byte() Public Overridable Overloads Property FileData As Byte() Get Return _FileData End Get Set(value As Byte())

            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

我会及时通知你这是如何处理一个/多个附加文件的

于 2013-07-09T10:29:04.450 回答