geting{";无法执行批处理命令.NHibernate的[SQL:SQL不可用]“}错误

本文关键字:SQL 错误 NHibernate quot 命令 批处理 执行 geting | 更新日期: 2023-09-27 18:26:05

我看了其他相关的帖子,但找不到任何解决方案
有时是徒劳的。Flush()我得到以下错误:

{"无法执行批处理命令。[SQL:SQL不可用]"}

以及内部异常:

{"UPDATE语句与FOREIGN KEY约束FK1377052553ABF955冲突。冲突发生在数据库ProcessDebug、表dbo中。Adjustment,列"AdjustmentId"。该语句已终止。"}

进程类映射的一部分:

   References(p => p.CurrentAdjustment)
        ;
    References(p => p.DefaultAdjustment)
        ;
    HasMany(p => p.Adjustments)
        .Cascade.AllDeleteOrphan()
        .Inverse()
        ;

以上所有这些属性都属于调整类型。只要我偶尔遇到这个错误,我就无法找到它。对于一个实体来说,它可能现在发生,但下次不会在同一段代码中发生。。。。

知道是什么原因导致了这个问题吗
我正在使用NH 3.2和Fluenthibernate
提前感谢

geting{";无法执行批处理命令.NHibernate的[SQL:SQL不可用]“}错误

在我的情况下,它在其中一个databese列中为"NULL"。检查数据库数据。

FOREIGN KEY->这意味着,您可能有空的i列,用于"联接"。

p.s.使用SQL Profiler并检查nHibernate生成的SQL。

您需要查看实际尝试执行的sql。

似乎您正在尝试将主键("AdjustmentId")更新为不存在的内容。因此出现了违反外键的情况。

这似乎是关于你的数据库,而不是你的nHibernate代码,检查日志文件中的SQL,并尝试执行它

要找到实际原因,您需要查看nHibernate生成的SQL。您可以使用nHibernate日志或nHibernat探查器来获取这些SQL。与上述错误消息相关的常见问题很少,包括:

  • 字符串或二进制数据将被截断。这个问题的一个例子是,每当您提供的字符串值大于数据库中定义的varchar/nvarchar字段大小时
  • 所需的主键值或外键值为null

可能不是NHibernate问题!请检查数据库中哪一列不为Null。为此,我将这些列设置为null。你可以做任何事!在插入时设置值,或在表中的这些列上设置null。

在我的例子中,我添加了一个列类型为DateTime的数据,我插入2100/2/2得到了这个错误,但当插入更合理的时间2001/2/2得到成功时,

所以可能问题出在您的数据中,应该遵循数据库中的一些规则。