簡體   English   中英

Nhibernate vb.net mvc無法編譯映射

[英]Nhibernate vb.net mvc could not compile mapping

我是NhIbernate和Vb.net MVC的新手,我正在嘗試做這個教程。 我正在使用VS 2013

http://www.dotnetjalps.com/2013/09/asp-net-mvc-nhibernate-crud-getting-started.html

但是使用Vb.net而不是C#我的當前配置就是這樣

在此輸入圖像描述

我得到了那些例外:

{"Could not compile the mapping document: d:\documenti\visual studio 2013\Projects\NhibernateMVC\NhibernateMVC\Models\Nhibernate\Employee.hbm.xml"}

{"persistent class NhibernateMVC.Models.Employee, NhibernateMVC not found"}

{"Impossibile caricare il tipo 'NhibernateMVC.Models.Employee' dall'assembly 'NhibernateMVC, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.":"NhibernateMVC.Models.Employee"}

這是我的Employee.vb類

Namespace NhibernateMVC.Models
    Public Class Employee

        Public _Id As Integer = 0
        Public _FirstName As String = ""
        Public _LastName As String = ""
        Public _Designation As String = ""

        Public Overridable Property Id() As Integer
            Get
                Return _Id
            End Get
            Set(ByVal Value As Integer)
                _Id = Value
            End Set
        End Property

        Public Overridable Property FirstName() As String
            Get
                Return _FirstName
            End Get
            Set(ByVal Value As String)
                _FirstName = Value
            End Set
        End Property

        Public Overridable Property LastName() As String
            Get
                Return _LastName
            End Get
            Set(ByVal Value As String)
                _LastName = Value
            End Set
        End Property

        Public Overridable Property Designation() As String
            Get
                Return _Designation
            End Get
            Set(ByVal Value As String)
                _Designation = Value
            End Set
        End Property

    End Class
End Namespace

這是我的Employee.hbm.xml

<?xml version="1.0" encoding="utf-8" ?>
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="true" assembly="NhibernateMVC" namespace="NhibernateMVC.Models">
      <class name="Employee" table="Employee" dynamic-update="true" >
        <cache usage="read-write"/>
        <id name="Id" column="Id" type="int">
          <generator class="native" />
        </id>
        <property name="FirstName" />
        <property name="LastName" />
        <property name="Designation" />
      </class>
</hibernate-mapping>

而這一個,NHIbernateSession.vb

Imports System.Web
Imports NHibernate
Imports NHibernate.Cfg

Namespace NhibernateMVC.Models

    Public Class NHibertnateSession
        Public Shared Function OpenSession() As ISession
            Dim configuration As New Configuration()

            Dim configurationPath = HttpContext.Current.Server.MapPath("~\Models\Nhibernate\hibernate.cfg.xml")
            Dim employeeConfigurationFile = HttpContext.Current.Server.MapPath("~\Models\Nhibernate\Employee.hbm.xml")

            configuration.Configure(configurationPath)

            configuration.AddFile(employeeConfigurationFile)
            Dim sessionFactory = configuration.BuildSessionFactory()

            Return sessionFactory.OpenSession()
        End Function
    End Class
End Namespace

VB.NET具有根命名空間的概念。 基本上,根命名空間前置於您使用Namespace聲明的任何命名Namespace

在定義命名空間時,這意味着在您的Employee類中:

Namespace NhibernateMVC.Models

由於項目的根命名空間(可能是NhibernateMVC除非你已經改變它),該類的完全限定名稱實際上是NhibernateMVC.NhibernateMVC.Models.Employee

您可以做一些事情來解決問題:

  1. 項目屬性中刪除根命名空間
  2. 更改Employee類的命名空間:

     Namespace Models 
  3. 更改Employee.hbm.xml文件以指向正確的完全限定名稱:

     <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="true" assembly="NhibernateMVC" namespace="NhibernateMVC.NhibernateMVC.Models"> 

因為其他人很困惑,我個人會選擇#2。 一旦你做了這個改變,你就會遇到另一個問題 - NHibernate不喜歡你的屬性有公共支持字段。 您應該調整Employee類以使用Private支持字段:

Namespace Models
    Public Class Employee

        Private _Id As Integer = 0
        Private _FirstName As String = ""
        Private _LastName As String = ""
        Private _Designation As String = ""
   ' ... etc

旁注: NHibertnateSessionNHibertnateSession有一個拼寫錯誤(這也在教程中提供)。 它可能應該是NHibernateSession

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM