我有一個父子關係,我已經把測試用例放在用戶和用戶組之間。我這樣做是爲了在嘗試使用關係執行cacade插入時複製父親 - 子女關係中的故障 。流利NHibernate父子級聯SaveOrUpdate失敗
兩個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 =新用戶(){姓名=「測試」}; Group g = new Group(){GroupName =「Test Group」}; u.Groups.Add(g);
using (var session = factory.OpenSession())
{
session.SaveOrUpdate(u);
}
但是它失敗,出現異常「無法將NULL值插入列‘用戶ID’,表‘test.dbo.Group’;列不允許空INSERT失敗 的語句已終止。」。我懷疑這是dude父對象的Id(一個標識列)作爲NULL傳遞,而不是新的值。這是一個錯誤還是有辦法解決這些映射,以便這個級聯關係成功?
這正是我所做的解決方法。不過,我會認爲這種親子關係是相當普遍的,因此會得到照顧。 – Dion 2010-11-02 19:48:43