从NHibernate获取{“无法执行批处理命令。[SQL:SQL not available]”}错误

时间:2012-02-28 13:29:18

标签: c# sql nhibernate c#-4.0 fluent-nhibernate

我查看了其他相关帖子,但找不到任何解决方案 有时在sesstion.Flush()我得到以下错误:

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

和内部例外:

{“UPDATE语句与FOREIGN KEY约束FK1377052553ABF955冲突。冲突发生在数据库ProcessDebug,表dbo.Adjustment,列'AdjustmentId'。语句已终止。”}

一个Process类映射:

   References(p => p.CurrentAdjustment)
        ;

    References(p => p.DefaultAdjustment)
        ;

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

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

知道可能导致问题的原因是什么? 我正在使用NH 3.2和FluentNhibernate
提前致谢

6 个答案:

答案 0 :(得分:2)

在我的情况下,它是" NULL"在一个数据库专栏中。检查数据库数据。

外键 - >这意味着,您可以使用null i列,即用于" join"。

P.S。使用SQL事件探查器并检查nHibernate生成的SQL。

答案 1 :(得分:1)

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

好像您正在尝试将主键(“AdjustmentId”)更新为不存在的内容。因此违反了外键。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

在我的情况下,我在类型为DateTime的列中添加数据, 我插入2001/2/2得到此错误,但是当插入更合理的时间i = i + 1 获得成功时,

所以问题可能在于您的数据,并且应遵循数据库中的某些规则。

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

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