我想使用一些没有舍入的预定义查找到NHibernate中的数据库。
基本上,我希望有这样的代码:
public class Countries
{
static Countries() {
Australia = new Country
{
Id = 14,
Description = "Australia"
}
}
public static Country Austrlia { get; protected set }
}然后编写以下代码片段:
address.Country = Countries.Australia;// Snippet1
if (address.Country == Countries.Australia) { // Snippet2
// Do something
}因此,我确实覆盖了Equals、GetHashCode,甚至重载操作符==和!=来查找国家/地区类。
仅当具有给定Id的国家/地区尚未加载到内存中时,Snippet1才起作用。否则它抛出NonUniqueObjectException,说明具有给定Id的对象已经在内存中。
要解决这个问题,我必须逐出加载的国家/地区,然后分配查找值。这感觉不对,我不确定再次执行国家/地区查询时会发生什么。
所以问题是:如何在NHibernate中维护静态查找类?
谢谢,德米特里。
发布于 2009-08-07 07:14:55
似乎NHibernate无法处理逻辑上相同的两个对象(但实例不同)。
因此,与其将“静态查找”与数据库查找混合使用,不如只使用其中的一种。
在我的例子中-存储在数据库中的查找。但是为了避免仅仅为了获取对象而往返数据库,只需要使用Load而不是Get:
address.Country = Session.Load<Country>(CountryIds.Australia); // This does not hit DB
address.Country = Session.Get<Country>(CountryIds.Australia); // This DOES hit DB发布于 2009-08-01 03:16:12
看看我们称之为Enumeration classes的东西..
这基本上是轻量级模式。
您可以使用IUserType实现将它们作为值或显示名称进行持久化。
我们和他们一起做疯狂的事情。例如,为DBA人员提供带有外键的自动生成的查找表,同时保留代码中的所有值。
https://stackoverflow.com/questions/1212530
复制相似问题