1

我想在 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 甚至重载运算符 == 和 != 用于 Country 类查找。

仅当具有给定 ID 的国家/地区尚未加载到内存中时,Snippet1 才有效。否则它会抛出 NonUniqueObjectException 说具有给定 Id 的对象已经在内存中。

为了解决这个问题,我必须驱逐加载的国家,然后分配查找值。这感觉不对,我不确定当再次执行国家/地区查询查询时会发生什么。

所以问题是:如何在 NHibernate 中维护静态查找类?

谢谢,德米特里。

4

2 回答 2

2

看看我们所说的枚举类..

它基本上是轻量级模式。

您可以使用IUserType实现将它们持久化为值或显示名称。

我们和他们一起做疯狂的事情。就像为 DBA 人员提供带有外键的自动生成的查找表,同时将所有值保留在代码中。

于 2009-08-01T03:16:12.290 回答
1

似乎 NHibernate 不能处理逻辑上相同的 2 个对象(但不同的实例)。
因此,与其将“静态查找”与数据库查找混合,不如只使用其中之一。

在我的情况下 - 查找存储在数据库中。但是为了避免为了获取对象而往返数据库,只需要使用 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-07T07:14:55.013 回答