gpt4 book ai didi

NHibernate.StaleStateException : Unexpected row count: 0; expected: 1

转载 作者:行者123 更新时间:2023-12-04 03:17:25 26 4
gpt4 key购买 nike

HL Guys,

我正在为现有系统编写后端管理程序。我选择了NHibernate作为我的数据访问解决方案,并且对它来说还很陌生。我在 parent /子女关系中遇到以下错误:

NHibernate.StaleStateException : Unexpected row count: 0; expected: 1



该错误是由以下事实引起的:在我的源代码中,我将新的子对象添加到MeetingAdministrators的父级子级集合中。保存父对象时,我希望还添加子对象,但是仅为父对象生成INSERT。 Nhibernate不会为子代生成INSERT,而是尝试更新子代,即使该子代不存在也是如此。因此,它会显示上面显示的错误消息。我在网上和nhibernate文档中到处都找到了这种情况,但没有找到任何帮助。大多数代码都涉及不属于主键的外键,或者人们似乎正在处理一对一或多对多的关系。我需要指定映射和代码,以便在插入父项时也插入子项。请帮忙。

我的数据结构如下:

session –父表
  • MeetingID(pk)(int,身份)
  • 说明
  • StartDate
  • IsActive
  • 地点

  • MeetingAdministrator –子表
  • MeetingID(pk,fk)
  • AdminNetworkID(pk)(varchar)
  • DateCreated
  • IsActive

  • 这是Visual Basic .NET源代码:

    <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

    这是映射文件:
    <!-- 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>

    最佳答案

    我很确定您需要在<version/>类中添加MeetingAdministrator属性,以使其正常工作。有关更多讨论,请参见this article

    关于NHibernate.StaleStateException : Unexpected row count: 0; expected: 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3741408/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com