2011-01-13 34 views
2

我有两种实体,评论和任务。这两种类型都可以由用户添加书签。所以,我创建了一个名为“书签”表:流利的NHibernate - 具有多个ChildKeyColumns的HasManyToMany可能吗?

CREATE TABLE [dbo].[Bookmarks] (
[ID] [int] IDENTITY(1,1) NOT NULL, 
[FKUserID] [int] NOT NULL, 
[FKCommentID] [int] NULL, 
[FKTaskID] [int] NULL) 

这些关系,为我的用户实体的映射是这样的:

var bookmarks = Component(x => x.Bookmarks, x => x.HasManyToMany(b => b.Comments) 
.Table("Bookmarks") 
.Access.CamelCaseField() 
.ParentKeyColumn("FKUserID") 
.ChildKeyColumn("FKCommentID") 
.AsBag() 
.LazyLoad()); 

bookmarks.HasManyToMany(b => b.Tasks) 
    .Table("Bookmarks") 
    .Access.CamelCaseField() 
    .ParentKeyColumn("FKUserID") 
    .ChildKeyColumn("FKTaskID") 
    .AsBag() 
    .LazyLoad(); 

这一切都将很好地我想工作,但不是当数据库对象是由NHibernate本身创建的。然后,我得到了很好的错误信息

NHibernate.Exceptions.GenericADOException:无法插入集合:[Domain.Model.User.Domain.Model.User.Bookmarks.Tasks#1] [SQL:INSERT INTO书签( FKUserID,FKTaskID)VALUES(@ p0,@ p1)] ----> System.Data.SqlClient.SqlException:无法将值NULL插入列'FKCommentID',表'xyzautomatedtests.dbo.Bookmarks';列不允许有空值。 INSERT失败。 该声明已被终止。

当然,我可以一直使用两个表,而不是这个,但没有办法让这个运行?不幸的是,我找不到一种方法将配置中的这两个子列设置为空。

任何提示?

+0

您使用的是什么版本的.Net? – Richard 2011-08-23 13:03:09

回答

2

仔细检查您的表格定义。 SQLException直接来自数据库,因此您遇到的问题来自数据库,而不是.Net。

只要确保您的书签表中的FKCommentID列实际上是可空的。

相关问题