【发布时间】:2014-05-12 18:23:35
【问题描述】:
我的任务是使用 Fluent NHibernate 映射一些表,这些表主要用于遗留应用程序,因此无法更改结构。
我遇到的问题似乎与我在 NHibernate 中使用的 CompositeId 映射有关。
以下是表格:
CREATE TABLE [dbo].[tbl_mtng](
[mtng_cd] [int] IDENTITY(1,1) NOT NULL,
...many other columns...
[mtng_cancelled] [bit] NOT NULL)
主键在 mtng_cd 上定义。
CREATE TABLE [dbo].[tbl_centre](
[centre_ID] [int] IDENTITY(1,1) NOT NULL,
...many other columns...,
[centre_name] [nvarchar](100) NOT NULL)
主键在 center_ID 上定义。
CREATE TABLE [dbo].[tbl_mtng_centre](
[mtng_cd] [int] NOT NULL,
[centre_ID] [int] NOT NULL)
主键定义在 mtng_cd 和 center_ID 上。 (复合键)
以下是 Fluent NHibernate 映射:
对于我的对象中心:
Table("dbo.tbl_centre")
Id(Function(x) x.Id).Column("centre_ID").GeneratedBy().Identity()
HasMany(Of MeetingCentre)(Function(x) x.MeetingCentres).KeyColumn("centre_ID")
对于我的对象会议:
Table("dbo.tbl_mtng")
Id(Function(x) x.Id).Column("mtng_cd").GeneratedBy().Identity()
HasMany(Of MeetingCentre)(Function(x) x.Centres).KeyColumn("mtng_cd")
对于我的对象 MeetingCentre:
Table("dbo.tbl_mtng_centre")
CompositeId().KeyReference(Function(x) x.Centre, "centre_ID").KeyReference(Function(x) x.Meeting, "mtng_cd")
问题出在这里:
当我创建一个简单的子来更新我的一个 MeetingCentre 对象以具有不同的中心(本质上是更新主键的一部分)时,我收到以下错误:
“批量更新从更新中返回了意外的行数;实际行数:0;预期:1”
关于未将 NOCOUNT 设置为 ON 的基础表上的触发器,我之前遇到过此错误,这会干扰 SQL 服务器在运行 NHibernate 的更新/插入后返回的值,但我认为这不是问题所在因为没有一个表定义了触发器。
这就像 NHibernate 不想更新复合主键一样简单吗?因为我可以在 SQL Server 中做到这一点,只要它不违反主键约束的唯一性。
如果有人有任何解决方案或探索途径,将不胜感激。
【问题讨论】:
标签: vb.net nhibernate fluent-nhibernate