gpt4 book ai didi

database - NHibernate 多对一和唯一约束违规

转载 作者:太空狗 更新时间:2023-10-30 01:55:19 24 4
gpt4 key购买 nike

我在尝试在 NHibernate 中建模多对一关系时遇到问题,其中“一”端的对象在列上具有唯一约束。问题如下:

我有两个表,'Person' 和 'Country'。每个人都有一个且只有一个与之相关的国家。一个国家可以有很多人(真的!:)),一个国家的名字是独一无二的。下面是Person端的映射:

<many-to-one Name="Country">
<column Name="CountryId"/>
</many-to-one>

在乡村方面:

<property name="Name" unique="true">
<column name="Name" length="50">
</property>

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

在我看来 Nibernate 应该有足够的映射元数据来做正确的事情(或者属性上的唯一属性不能确保这一点?)。有谁知道如何执行此操作或有解决方法?

谢谢,

马丁

最佳答案

您需要将一个 Country 实例分配给 Person 实例的 Country 属性(不仅仅是设置 ID)。像这样的东西:

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

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

关于database - NHibernate 多对一和唯一约束违规,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/290305/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com