0

これは StackOverflow に関する私の最初の質問です!

vb.net プロジェクトで NHibernate 2 を使用しています。MS Access データベースにアクセスするために NHibernate.JetDriver も使用しています。

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 []型にキャストできませんでした。 ; ファイル名の区切られたリストですが、それ以上のものはありません!

4

2 に答える 2

0

わかりました、私は十分に近いと思います!

hbm.xml でこのプロパティを使用します

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

クラス clsPeople でこのプロパティを使用します

Private _FileData As Byte() Public Overridable Overloads プロパティ 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

1つまたは複数の添付ファイルでこれがどのように機能するかについては、引き続きお知らせします

于 2013-07-09T10:29:04.450 に答える
0

本当に必要でない限り、sql-type を指定する必要はありません。代わりに、「タイプ」を「String」または「AnsiString」として指定できます。

次に、NHibernate の最新バージョン (現時点では 3.3.3) を使用することを強くお勧めします。また、Mapping By Code や属性などの他のマッピング タイプを検討することもできます (ただし、流暢には近づかないでください :)
PS。freenode IRC からあなたの質問を見つけました

于 2013-07-08T06:13:10.393 に答える