首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NHibernate中的静态查找

NHibernate中的静态查找
EN

Stack Overflow用户
提问于 2009-07-31 13:25:51
回答 2查看 1.8K关注 0票数 1

我想使用一些没有舍入的预定义查找到NHibernate中的数据库。

基本上,我希望有这样的代码:

代码语言:javascript
运行
复制
public class Countries
{
  static Countries() {
    Australia = new Country
      {
          Id = 14,
          Description = "Australia"
      }
  }
  public static Country Austrlia { get; protected set }
}

然后编写以下代码片段:

代码语言:javascript
运行
复制
address.Country = Countries.Australia;// Snippet1
if (address.Country == Countries.Australia) { // Snippet2
  // Do something
}

因此,我确实覆盖了Equals、GetHashCode,甚至重载操作符==和!=来查找国家/地区类。

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

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

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

谢谢,德米特里。

EN

Stack Overflow用户

回答已采纳

发布于 2009-08-07 07:14:55

似乎NHibernate无法处理逻辑上相同的两个对象(但实例不同)。

因此,与其将“静态查找”与数据库查找混合使用,不如只使用其中的一种。

在我的例子中-存储在数据库中的查找。但是为了避免仅仅为了获取对象而往返数据库,只需要使用Load而不是Get:

代码语言:javascript
运行
复制
address.Country = Session.Load<Country>(CountryIds.Australia); // This does not hit DB
address.Country = Session.Get<Country>(CountryIds.Australia); // This DOES hit DB
票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1212530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档