我有两种实体,评论和任务。这两种类型都可以由用户添加书签。所以,我创建了一个名为“书签”表:流利的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失败。 该声明已被终止。
当然,我可以一直使用两个表,而不是这个,但没有办法让这个运行?不幸的是,我找不到一种方法将配置中的这两个子列设置为空。
任何提示?
您使用的是什么版本的.Net? – Richard 2011-08-23 13:03:09