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
提前感谢
在我的情况下,它在其中一个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
得到成功时,
所以可能问题出在您的数据中,应该遵循数据库中的一些规则。