Hl Guys,NHibernate.StaleStateException: Số hàng không mong đợi: 0; dự kiến: 1
Tôi đang bận viết chương trình quản trị phụ trợ cho hệ thống tồn tại. Tôi đã chọn NHibernate cho giải pháp truy cập dữ liệu của tôi và khá mới mẻ với nó. Tôi gặp phải lỗi sau trong mối quan hệ cha/con:
NHibernate.StaleStateException: Số hàng không mong muốn: 0; dự kiến: 1
Lỗi này là do mã nguồn của tôi thêm đối tượng con mới vào bộ sưu tập con của cha mẹ của MeetingAdministrators. Khi tôi lưu đối tượng cha mẹ, tôi mong đợi các con được thêm vào, tuy nhiên một INSERT chỉ được tạo ra cho đối tượng cha. Nhibernate không tạo ra một INSERT cho trẻ nhưng thay vào đó cố gắng để UPDATE đứa trẻ mặc dù nó không tồn tại. Do đó nó sẽ trả về thông báo lỗi được hiển thị ở trên. Tôi đã xem ở khắp mọi nơi trên trang web và tài liệu nhibernate cho kịch bản này nhưng không tìm thấy bất kỳ trợ giúp nào. Hầu hết mã đều liên quan đến các khoá ngoại không phải là một phần của khóa chính, hoặc mọi người dường như đang xử lý các mối quan hệ một-một hoặc nhiều-nhiều. Tôi cần phải xác định ánh xạ và mã để chèn vào phụ huynh, các em cũng được chèn vào. Hãy giúp tôi.
cấu trúc dữ liệu của tôi là như sau:
hội họp - bảng cha
- MeetingID (pk) (int, danh tính)
- Mô tả
- StartDate
- IsActive
- Địa điểm
MeetingAdministrator - bảng con
- MeetingID (pk, fk)
- AdminNetworkID (pk) (varchar)
- DateCreated
- IsActive
Và đây là Visual Basic. NET source:
<Serializable()> _
Public Class MeetingAdministrator
Private _MeetingID As Integer
Public Overridable Property MeetingID() As Integer
Get
Return _MeetingID
End Get
Set(ByVal value As Integer)
_MeetingID = value
End Set
End Property
Private _AdminNetworkID As String
Public Overridable Property AdminNetworkID() As String
Get
Return _AdminNetworkID
End Get
Set(ByVal value As String)
_AdminNetworkID = 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 _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 _meeting As Meeting
Public Overridable Property Meeting() As Meeting
Get
Return _meeting
End Get
Set(ByVal value As Meeting)
_meeting = value
End Set
End Property
Public Overrides Function Equals(ByVal obj As Object) As Boolean
Return MyBase.Equals(obj)
End Function
Public Overrides Function GetHashCode() As Integer
Return MyBase.GetHashCode()
End Function
End Class
Imports Iesi.Collections
Imports Iesi.Collections.Generic
Public Class Meeting
Private _MeetingID As Integer
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
Private _StartDate As Date = Now
Public Overridable Property StartDate() As Date
Get
Return _StartDate
End Get
Set(ByVal value As Date)
_StartDate = 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 _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 _Venue As String
Public Overridable Property Venue() As String
Get
Return _ Venue
End Get
Set(ByVal value As String)
_ Venue = value
End Set
End Property
Private _meetingAdministrator As ISet(Of MeetingAdministrator)
Public Overridable Property MeetingAdministrators() As ISet(Of MeetingAdministrator)
Get
Return _meetingAdministrator
End Get
Set(ByVal value As ISet(Of MeetingAdministrator))
_meetingAdministrator = value
End Set
End Property
Public Overridable Sub AddAdministrator(ByVal meetingAdministrator As MeetingAdministrator)
meetingAdministrator.Meeting = Me
_meetingAdministrator.Add(meetingAdministrator)
End Sub
Public Sub New()
_meetingAdministrator = New HashedSet(Of MeetingAdministrator)()
End Sub
End Class
Dưới đây là các tập tin bản đồ:
<!-- Meeting.hbm.xml -->
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Data"
namespace="Data.Domain" >
<!-- Mapping Information -->
<class name="Meeting" table="Meeting" >
<id name="MeetingID" column="MeetingID" type="int">
<generator class="identity" />
</id>
<property name="Description" />
<property name="StartDate" />
<property name="IsActive" />
<property name="Venue" />
<set name="MeetingAdministrators" table="MeetingAdministrator" inverse="true" lazy="true" cascade="save-update" access="property" >
<key column="MeetingID" foreign-key="MeetingID" />
<one-to-many class="Meeting" />
</set>
</class>
</hibernate-mapping>
<!-- MeetingAdministrator.hbm.xml -->
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Data"
namespace="Data.Domain" >
<!-- Mapping Information -->
<class name="MeetingAdministrator" table="MeetingAdministrator" >
<composite-id>
<key-property name="AdminNetworkID" column="AdminNetworkID" type="string" >
</key-property>
<key-many-to-one name="Meeting" class="Meeting" >
<column name="MeetingID" />
</key-many-to-one>
</composite-id>
<property name="IsActive" />
<property name="DateCreated" />
</class>
</hibernate-mapping>
Cảm ơn một triệu người, Điều đó đã hiệu quả. Tôi đã theo dõi bài viết và cũng thêm những thứ như phương thức Equals trái ngược với những gì tôi đang làm, đó là ghi đè bằng và để lại việc thực hiện cơ sở ở đó. Nhưng đó là tài sản hoạt động. Thật kỳ lạ khi nghĩ rằng có rất ít thông tin rõ ràng về thẻ này ngoài đó –
Tachi
@Tachi - hãy nhớ ghi đè GetHashCode; điều này là quan trọng nếu bạn sẽ được ánh xạ s ví dụ ... vui vì tôi có thể giúp! –
DanP
liên kết của bạn không may đã chết, ( –