使用流畅的 NHibernate 进行一对多级联插入

发布于 2024-09-24 12:45:24 字数 506 浏览 2 评论 0原文

我有两个使用流畅的 NHibernate 映射的类 - User 和 UserRoleAssignment。一个用户有许多用户角色分配。这是用户的相关映射:

HasMany(x => x.Roles)
.Table("UserRoleMap")
.Cascade.SaveUpdate();

对于 UserRoleAssignment:

Map(x => x.User_Id);

如您所见,我仅从 User 引用到 UserRoleAssignment。在 UserRoleAssignment 中,我仅映射外键列 (User_Id)。 问题是,当我保存用户时,出现由外键约束引起的异常,因为 NHibernate 在 User_id 属性的值中插入 0。这只发生在新用户上 - 现有用户(已经有 ID)工作正常。

那么问题是,如何确保NHibernate将User_Id的值设置为插入新User时生成的ID?

多谢!

I have two classes mapped using fluent NHibernate - User and a UserRoleAssignment. An User has many UserRoleAssignments. Here's the relevant map for user:

HasMany(x => x.Roles)
.Table("UserRoleMap")
.Cascade.SaveUpdate();

And for UserRoleAssignment:

Map(x => x.User_Id);

As you can see, I'm only referencing from User to UserRoleAssignment. From UserRoleAssignment, I'm only mapping the foreign key column (User_Id).
The problem is, that when I save the user, I get an exception caused by the foreign key constraint, because NHibernate is inserting 0 in the value for the User_id property. This only happens on new users - existing users (which already has an ID), works fine.

So the question is, how can I make sure that NHibernate sets the value of User_Id to the ID generated when inserting the new User?

Thanks a lot!

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

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

发布评论

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

评论(1

街道布景 2024-10-01 12:45:24

这记录在 http://nhibernate.info/doc/nh/ en/index.html#collections-onetomany

非常重要的注意事项:如果 关联的 列声明为 NOT NULL,NHibernate 在创建或更新关联时可能会导致约束冲突。为了防止出现此问题,您必须使用双向关联,并将多值端(集合或包)标记为 inverse="true"。请参阅本章后面关于双向关联的讨论。

This is documented in http://nhibernate.info/doc/nh/en/index.html#collections-onetomany:

Very Important Note: If the <key> column of a <one-to-many> association is declared NOT NULL, NHibernate may cause constraint violations when it creates or updates the association. To prevent this problem, you must use a bidirectional association with the many valued end (the set or bag) marked as inverse="true". See the discussion of bidirectional associations later in this chapter.

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