当 ID < 时 NHibernate 写入 value = NULL 0

发布于 2024-10-19 10:14:23 字数 203 浏览 5 评论 0 原文

我们想要实现一个简单的规则,其中当实体的 ID 等于 -1 时,NHibernate 将向数据库分配(保留)NULL。例如,我们有一个“系统内”帐户,应将其作为 NULL 持久保存到数据库中。

如果我们尝试将 ID -1 持久保存到数据库中,则会出现外键异常,因为外部表中不存在该 ID。

我们使用 NHibernate 和 FluentNhibernate。

We would like to implement a simple rule in which NHibernate would assign (persist) NULL to the database when the ID for the entity is equal to -1. For example, we have an "in system" account which should be persisted to the database as NULL.

If we try to persist the ID of -1 to the database we get a Foreign key exception because the ID does not exist in the foreign table.

We are using NHibernate with FluentNhibernate.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

£烟消云散 2024-10-26 10:14:23

我认为您没有正确映射您的实体。如果它是正确的,您应该使用任何技巧:您不应该看到 ID,而是对另一个实体的引用,在这种情况下,您将保留带有空值的引用。即使在错误的情况下,您也希望使用表示为 ID 的引用来映射实体(这几乎总是错误的),如果该 id 可为空,则将其映射为可为空,这样您就拥有了 int?并且您可以将 null 表示为 null,而不是使用 -1 技巧。

查看评论

如果自定义实体在内部用作 null 值,则会话拦截器可以提供帮助:处理 OnSave 并通过用 null 替换虚拟实体来处理特殊情况。
您可以在此处找到文档 关于 NH 拦截器。
在同一文档的 11.2 章节中,有与事件相关的部分,相当于此类问题。

I think you didn't a proper mapping of your entity. If it were correct, you should made any trick: you should not see an ID, but a reference to another entity, and in this case you will persist the reference with a null value. Even in the wrong case you want map the entity with a reference expressed as an ID ( that is almost always wrong ) if this id is nullable, map it as a nullable so you have int? and you can fit null to mean null, instead of the -1 trick.

See Comments

If a custom entity is internally used as a null value, a session interceptor could help: working on the OnSave and treat the special case by replacing the dummy entity with null.
Here you can find the documentation about NH interceptors.
At the 11.2 chaper od the same doc there is the portion related to events, equivalents for this kind of problem.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文