【问题标题】:Fluent NHibernate - HasManyToMany with multiple ChildKeyColumns possible?Fluent NHibernate - HasManyToMany 可能有多个 ChildKeyColumns?
【发布时间】: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


【解决方案1】:

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

只需确保 Bookmarks 表中的 FKCommentID 列实际上是 Nullable。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-08
    • 1970-01-01
    • 2011-05-25
    • 2012-06-12
    相关资源
    最近更新 更多