How can I map NHibernate domain classes with an existing table
I am presently trying to use NHibernate on a project where I do not have permissions to CREATE TABLE in SQL 2005.
I keep getting a mapping error, and my assumption is that I do not setup the table by generating it. Is it fair of me to assume that NHibernate can only map successfully with tables that were generated by its tool?
If not, how can I make sure it works for an existing table?
14 Sept Responding to request to provide more details:
<id name="MeetingID" column="MeetingID" type="int">
<generator class="identity" />
</id>
<property name="Description" />
<property name="OwnerNetworkID" />
<property name="StartDate" />
<property name="EndDate" />
<property name="DayStartHour" />
<property name="DayStartMinute" />
<property name="DayEndHour" />
<property name="DayEndMinute" />
<property name="BreakStartHour" />
<property name="BreakStartMinute" />
<property name="BreakEndHour" />
<property name="BreakEndMinute" />
<property name="IsActive" />
<property name="SessionIntervalMinutes" />
<property name="PeoplePerSlot" />
<property name="DateCreated" />
<property name="LastModified" />
<property name="UpdatedBy" />
<property name="ChangeTimestamp" />
<property name="ClosedForBookingDaysPrior" />
<property name="DefaultMeetingRoom" />
This is the class:
Namespace MyNamespace Public Class Meeting
Private _MeetingID As Integer
Private _OwnerNetworkID As String
Private _Description As String
Public Overridable Property MeetingID() As Integer
Get
Return _MeetingID
End Get
Set(ByVal value As Integer)
_MeetingID = value
End Set
End Property
Public Overridable Property Description() As String
Get
Return _Description
End Get
Set(ByVal value As String)
_Description = value
End Set
End Property
Public Overridable Property OwnerNetworkID() As String
Get
Return _OwnerNetworkID
End Get
Set(ByVal value As String)
_OwnerNetworkID = value
End Set
End Property
Private _StartDate As Date
Public Overridable Property StartDate() As Date
Get
Return _StartDate
End Get
Set(ByVal value As Date)
_StartDate = value
End Set
End Property
Private _EndDate As Date
Public Overridable Property EndDate() As Date
Get
Return _EndDate
End Get
Set(ByVal value As Date)
_EndDate = value
End Set
End Property
Private _DayStartHour As Byte
Public Overridable Property DayStartHour() As Byte
Get
Return _DayStartHour
End Get
Set(ByVal value As Byte)
_DayStartHour = value
End Set
End Property
Private _DayStartMinute As Byte
Public Overridable Property DayStartMinute() As Byte
Get
Return _DayStartMinute
End Get
Set(ByVal value As By开发者_运维百科te)
_DayStartMinute = value
End Set
End Property
Private _DayEndHour As Byte
Public Overridable Property DayEndHour() As Byte
Get
Return _DayEndHour
End Get
Set(ByVal value As Byte)
_DayEndHour = value
End Set
End Property
Private _DayEndMinute As Byte
Public Overridable Property DayEndMinute() As Byte
Get
Return _DayEndMinute
End Get
Set(ByVal value As Byte)
_DayEndMinute = value
End Set
End Property
Private _BreakStartHour As Byte
Public Overridable Property BreakStartHour() As Byte
Get
Return _BreakStartHour
End Get
Set(ByVal value As Byte)
_BreakStartHour = value
End Set
End Property
Private _BreakStartMinute As Byte
Public Overridable Property BreakStartMinute() As Byte
Get
Return _BreakStartMinute
End Get
Set(ByVal value As Byte)
_BreakStartMinute = value
End Set
End Property
Private _BreakEndHour As Byte
Public Overridable Property BreakEndHour() As Byte
Get
Return _BreakEndHour
End Get
Set(ByVal value As Byte)
_BreakEndHour = value
End Set
End Property
Private _BreakEndMinute As Byte
Public Overridable Property BreakEndMinute() As Byte
Get
Return _BreakEndMinute
End Get
Set(ByVal value As Byte)
_BreakEndMinute = value
End Set
End Property
Private _IsActive As Byte
Public Overridable Property IsActive() As Byte
Get
Return _IsActive
End Get
Set(ByVal value As Byte)
_IsActive = value
End Set
End Property
Private _SessionIntervalMinutes As Byte
Public Overridable Property SessionIntervalMinutes() As Byte
Get
Return _SessionIntervalMinutes
End Get
Set(ByVal value As Byte)
_SessionIntervalMinutes = value
End Set
End Property
Private _PeoplePerSlot As Short
Public Overridable Property PeoplePerSlot() As Short
Get
Return _PeoplePerSlot
End Get
Set(ByVal value As Short)
_PeoplePerSlot = value
End Set
End Property
Private _DateCreated As Date
Public Overridable Property DateCreated() As Date
Get
Return _DateCreated
End Get
Set(ByVal value As Date)
_DateCreated = value
End Set
End Property
Private _LastModified As Date
Public Overridable Property LastModified() As Date
Get
Return _LastModified
End Get
Set(ByVal value As Date)
_LastModified = value
End Set
End Property
Private _UpdatedBy As String
Public Overridable Property UpdatedBy() As String
Get
Return _UpdatedBy
End Get
Set(ByVal value As String)
_UpdatedBy = value
End Set
End Property
Private _ChangeTimestamp As Byte()
Public Overridable Property ChangeTimestamp() As Byte()
Get
Return _ChangeTimestamp
End Get
Set(ByVal value As Byte())
_ChangeTimestamp = value
End Set
End Property
Private _ClosedForBookingDaysPrior As Byte
Public Overridable Property ClosedForBookingDaysPrior() As Byte
Get
Return _ClosedForBookingDaysPrior
End Get
Set(ByVal value As Byte)
_ClosedForBookingDaysPrior = value
End Set
End Property
Private _DefaultMeetingRoom As String
Public Overridable Property DefaultMeetingRoom() As String
Get
Return _DefaultMeetingRoom
End Get
Set(ByVal value As String)
_DefaultMeetingRoom = value
End Set
End Property
End Class
End Namespace
I have found the source of my problem.
The error was cause by me not calling the Configure() method before calling AddAssembly(typeof(Type)). This happens when I create a SessionFactory object.
Here is the VB example of this solution:
Before
Private Shared ReadOnly Property SessionFactory() As ISessionFactory
Get
If _sessionFactory Is Nothing Then
Dim configuration As New Configuration
configuration.AddAssembly(GetType(Meeting).Assembly)
_sessionFactory = configuration.BuildSessionFactory
End If
Return _sessionFactory
End Get
End Property
After
Private Shared ReadOnly Property SessionFactory() As ISessionFactory
Get
If _sessionFactory Is Nothing Then
Dim configuration As New Configuration
//Was missing
configuration.Configure()
//Configure
configuration.AddAssembly(GetType(Meeting).Assembly)
_sessionFactory = configuration.BuildSessionFactory
End If
Return _sessionFactory
End Get
End Property
精彩评论