流畅的 NHibernate 一对多关系设置外键为 null

2023-12-19

我有一个简单的 Fluent NHibernate 模型,其中包含两个相关的类:

public class Applicant
    {
        public Applicant()
        {
            Tags = new List<Tag>();
        }

        public virtual int Id { get; set; }

        //other fields removed for sake of example

        public virtual IList<Tag> Tags { get; protected set; }

        public virtual void AddTag(Tag tag)
        {
            tag.Applicant = this;
            Tags.Add(tag);
        }
    }


public class Tag
{
    public virtual int Id { get; protected set; }
    public virtual string TagName { get; set; }

    public virtual Applicant Applicant { get; set; }
}

我的流畅映射如下:

public class ApplicantMap : ClassMap<Applicant>
    {
        public ApplicantMap()
        {
            Id(x => x.Id);

            HasMany(x => x.Tags).Cascade.All();
        }
    }

    public class TagMap : ClassMap<Tag>
    {
        public TagMap()
        {
            Id(x => x.Id);
            Map(x => x.TagName);

            References(x => x.Applicant).Not.Nullable();
        }
    }

每当我尝试update一个申请人(插入一个新的工作正常),它失败了,我在日志中看到以下 SQL 异常:

11:50:52.695 [6] DEBUG NHibernate.SQL - UPDATE [Tag] SET Applicant_id = null WHERE Applicant_id = @p0;@p0 = 37 [Type: Int32 (0)] 
11:50:52.699 [6] ERROR NHibernate.AdoNet.AbstractBatcher - Could not execute command: UPDATE [Tag] SET Applicant_id = null WHERE Applicant_id = @p0 System.Data.SqlClient.SqlException (0x80131904): Cannot insert the value NULL into column 'Applicant_id', table 'RecruitmentApp.dbo.Tag'; column does not allow nulls. UPDATE fails.

为什么 NHibernate 尝试更新标签表并将 Applicant_id 设置为 null?我对此一无所知。


Set Applicant.Tags to Inverse将指示 NHibernate 保存Tags之后Applicant.

public class ApplicantMap : ClassMap<Applicant>
{
    public ApplicantMap()
    {
        Id(x => x.Id);

        HasMany(x => x.Tags).Cascade.All().Inverse();
    }
}

更多详情:

Inverse(相对于.Not.Inverse()) 表示关系的另一方(在这种情况下,每个Tag) 负责维持关系。因此,NHibernate 知道Applicant必须先保存,以便Tag有一个有效的外键Applicant.

经验法则:包含外键的实体通常是所有者,因此另一个表应该具有Inverse

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

流畅的 NHibernate 一对多关系设置外键为 null 的相关文章

随机推荐

  • 使用 SVG 作为背景图像

    我似乎无法让它按预期工作 我的页面根据加载的内容更改高度 如果需要滚动 则 svg 似乎不会拉伸 html height 100 background image url http www horizonchampion eu themes
  • 如何通过 iPhone 应用程序向 Facebook 中的某人发送好友请求?

    有没有办法通过iPhone应用程序发送好友请求 如果是 请帮助我 我在网上搜索过但没有得到解决方案 我得到以下代码来发送应用程序请求而不是发送好友请求 NSMutableDictionary variables NSMutableDicti
  • 用java将BitSet写入文件

    我有一个 BitSet 并想将其写入文件 我遇到了一个使用 writeObject 方法使用 ObjectOutputStream 的解决方案 我查看了java API中的ObjectOutputStream 发现你可以写其他东西 byte
  • 横向模式下的标签栏控制器

    我正在开发一个项目 需要在横向模式下使用应用程序 我通过将界面方向设置为横向来对 plist 文件进行更改 我也将 xib 文件中的方向更改为横向 但当应用程序在模拟器中启动时 选项卡栏控制器仍仅以纵向模式显示 任何人都可以帮忙解决这个问题
  • Angular2限制所有路由

    Helloo 我创建了一个守卫 import Injectable from angular core import Router CanActivate from angular router Injectable export clas
  • 尝试在 JavaScript 中使用 Gruber 的“改进的”URL 匹配正则表达式模式时,如何修复“无效组”错误?

    我正在尝试整合约翰 格鲁伯的一种改进的自由 准确的正则表达式模式 用于匹配 URL http daringfireball net 2010 07 improved regex for matching urls进入我的 JavaScrip
  • JS - 动态更改文本字段

    我正在尝试在不提交任何内容的情况下更改一个文本字段中另一个文本字段的值 例子 文本字段 1 输入 你好 文本字段 2 此处也插入了 你好 下面是我的表格
  • 当应用程序位于前台时,如何计算应用程序的使用时间?

    我正在开发一个 Android 应用程序来跟踪每日应用程序的使用情况 这个想法是 用户可以为任何应用程序设置每日时间限制 超过限制后最多 2 分钟内会出现通知 延迟的原因 我使用创建了一个警报系统报警管理器每分钟都会运行一个类求职意向服务这
  • 将库版本设置为稳定时遇到问题

    我创建了一个在另一个应用程序脚本中使用的库 并查看 Google 上的清单文档 它说如果您希望它自动使用最新版本 您可以将 库 部分中的 版本 设置为 稳定 可用版本 dependency libraries version 字符串 脚本使
  • 表单初始加载后会触发什么事件?

    我对可以在加载表单后触发的事件特别感兴趣 这样我就可以在控制器代码中初始化字段等 没有事件 但您可以添加一个initialize方法 该方法由FXMLLoader创建内容并将字段注入到控制器实例后 public MyController F
  • 使用自动布局的 iOS 消息单元格宽度/高度

    The Goal 我正在尝试创造一个动态message使用自动布局的单元格 我尝试过的 在大多数情况下 单元格的定位正确 并且具有以下约束的自动布局 问题 我的第一个问题是消息标签 可复制标签 宽度受到限制 这似乎可以通过使用来解决setP
  • 字符串中的空字符

    考虑这个字符串 var s A 0Z 它的长度为 3 由下式给出s length Using console log你可以看到绳子没有被切断s 1 is and s charCodeAt 1 is 0 当你在 Firefox 中提醒它时 你
  • Java - 为什么 str.substring(str.length()) 是可接受的代码行? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 长话短说 为什么Java不会为这行代码抛出IndexOutOfBoundsException str substring str length
  • 只是想知道 spring mvc 与 django 之间的区别[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在scala中将元组列表转换为数据帧

    我有一个字符串元组列表 List String String String 如何使用 Scala 将其转换为数据帧 你创建一个SparkSession 从 Spark 2 0 0 开始 或SQLContext 然后你可以使用隐式toDF S
  • 有没有办法可以为自适应卡提供列填充-自适应 MS BOT

    我正在使用自适应卡来使用自适应卡模板包在表格中显示动态内容 我已经对其进行了自定义 但有一列仍然拒绝到位 该列总是比其他列有更多的内容 因此它超出了行数 因此扩大了表格并使其看起来很难看 在此处输入图像描述 1 1 async testTa
  • Erlang 中的 Ruby

    是否可以将 Ruby 嵌入到 Erlang 中 Yecc 是正确的工具吗 如果可以的话 大概需要多少工时 Erlectricity 将 Ruby 暴露给 Erlang 反之亦然 http github com mojombo erlectr
  • sqlite3 从 C 批量插入?

    我遇到了 import 命令来执行此操作 批量插入 但是是否有一个可以使用 sqlite3 exec 执行的查询版本 我只想将一个小文本文件内容复制到表中 下面这个的查询版本 import demotab txt mytable Sqlit
  • 在 ActionbarSherlock 中设置进度条样式

    ActionbarSherlock 中的水平进度条太细 很难看到 我怎样才能将其设计得厚一些像素 我尝试通过继承 Widget Sherlock Light ProgressBar Horizo ntal 的样式来在 styles xml
  • 流畅的 NHibernate 一对多关系设置外键为 null

    我有一个简单的 Fluent NHibernate 模型 其中包含两个相关的类 public class Applicant public Applicant Tags new List