[英]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
。
您可以做一些事情來解決問題:
更改Employee
類的命名空間:
Namespace Models
更改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
旁注: NHibertnateSession
類NHibertnateSession
有一個拼寫錯誤(這也在教程中提供)。 它可能應該是NHibernateSession
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.