【发布时间】:2010-11-02 12:29:14
【问题描述】:
我有一个父子关系,我在用户和组之间放置了一个测试用例。我这样做是为了复制失败 尝试使用父子关系执行级联插入时的父子关系。
两个SQL表如下:
CREATE TABLE [dbo].[User]
(
[Id] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY,
[Name] [varchar](50) NOT NULL,
)
CREATE TABLE [dbo].[Group]
(
[Id] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY,
[GroupName] [varchar](50) NOT NULL,
[UserId] [int] NOT NULL,
)
ALTER TABLE [dbo].[Group] WITH CHECK ADD CONSTRAINT [FK_Group_User] FOREIGN KEY([UserId])
REFERENCES [dbo].[User] ([Id])
这些对象用以下映射表示这两个表:
public class UserMap : ClassMap<User>
{
public UserMap()
{
Table("[User]");
Id(x => x.Id).GeneratedBy.Identity();
Map(x => x.Name).Not.Nullable();
HasMany(x => x.Groups).KeyColumn("UserId").Cascade.SaveUpdate();
}
}
public class GroupMap : ClassMap<Group>
{
public GroupMap()
{
Table("[Group]");
Id(x => x.Id).GeneratedBy.Identity();
Map(x => x.GroupName).Not.Nullable();
References(x => x.User).Column("UserId").Not.Nullable();
}
}
创建对象的代码很简单:
用户 u = new User() { Name = "test" }; Group g = new Group() { GroupName = "Test Group" }; u.Groups.Add(g);
using (var session = factory.OpenSession())
{
session.SaveOrUpdate(u);
}
但是它失败并出现异常“无法将值 NULL 插入列 'UserId'、表 'test.dbo.Group';列不允许空值。插入失败。 该语句已终止”。我怀疑这是由于父对象的 Id(一个标识列)作为 NULL 而不是新值传递的。这是一个错误还是有办法修复这些映射,以便这个级联关系成功了吗?
【问题讨论】:
标签: nhibernate fluent