【发布时间】:2011-08-23 21:06:24
【问题描述】:
我有两种实体,cmets 和任务。两种类型都可以由用户添加书签。所以我创建了一个名为“书签”的表:
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 Bookmarks (FKUserID, FKTaskID) VALUES (@p0, @ p1)] ----> System.Data.SqlClient.SqlException:无法将值 NULL 插入列“FKCommentID”、表“xyzautomatedtests.dbo.Bookmarks”;列不允许空值。插入失败。 该语句已终止。
当然,我本来可以使用两张表而不是这张,但是没有办法让它运行吗?不幸的是,我找不到将配置中的这两个子列设置为可为空的方法。
有什么提示吗?
【问题讨论】:
-
您使用的是什么版本的 .Net?
标签: sql sql-server nhibernate fluent-nhibernate