当前位置:  开发笔记 > 编程语言 > 正文

NHibernate多对一和唯一约束违规

如何解决《NHibernate多对一和唯一约束违规》经验,为你挑选了1个好方法。

我试图在NHibernate中建模多对一关系时遇到问题,其中"一"侧的对象对列具有唯一约束.问题如下:

我有两个表,'人'和'国家'.每个人都有一个且只有一个与之相关的国家.一个国家可以有很多人(真的!:))和国家名称是唯一的.以下是Person端的映射:




在乡村方面:




现在在数据库中,我在Country表的Name列中添加了一个唯一约束.如果我在Person实例上调用Save(),NHibernate只是尝试执行INSERTS,而我希望它检查是否存在Country Name并在Person表的CountryID列中使用它的ID.相反,抛出的异常是由于违反数据库中的唯一约束而导致的.

在我看来,Nibernate应该有足够的映射元数据来做正确的事情(或者属性上的唯一属性不确保这个吗?).有谁知道如何做到这一点或有一个解决方法?

谢谢,

马亭



1> Sean Carpent..:

您需要将一个Country实例分配给Person实例的Country属性(而不仅仅是设置ID).就像是:

Person p = new Person();
p.Country = session.Load(countryId);
session.Save(p);

然后NHibernate将知道该怎么做.这也不会导致数据库命中检索国家/地区,因为Load方法将返回国家/地区代理,您访问的唯一内容是国家/地区实例的ID.

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有