【问题标题】:NHibernate not calling SQL ServerNHibernate 不调用 SQL Server
【发布时间】:2016-08-20 22:24:01
【问题描述】:

这个方法被调用。

    public IList<MyStuff> GetMyStuff(Int64 MyStuffId)
    {
        ICriteria criteria = NHibernateSessionManager.Instance.GetSession().CreateCriteria(typeof(MyStuff));
        criteria.Add(Expression.Eq("x", MyStuff));
        return criteria.List<MyStuff>();
    }

但如果我分析 SQL Server,我可以看到 NHibernate 不会尝试访问服务器。

不会抛出任何错误。它只是 criteria.List() 只是返回 0 行。

MyStuff 是一个类

public class MyStuff {
    public virtual int Id { get; set; }
    public virtual int x { get; set; }
    ... more attributes ....
    public override int GetHashCode() {
       return (GetType().FullName + "|" + Id.ToString()).GetHashCode();
    }
}

而 MyStuff 是一个 HBM 映射:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="false" assembly="MyStuff" namespace="My.Stuff" default-lazy="false">
  <class name ="MyStuff" table="dbo.viewMyStuff" dynamic-update="false" lazy="false">
    <cache usage="read-only"/>
    <id name="Id" column="Id" type="int">
      <generator class="native" />
    </id>
    <property name="x" />
    .... other properties
  </class>
</hibernate-mapping>

以下工作只是:

select * from viewMyStuff

NHibernate 可以很好地处理同一项目中的其他类/视图。

事实上,如果我故意将 HBM​​ 文件中的“表格”错字为“XviewXMyStuffX”,NHibernate 对错字没有任何问题。为什么 NHibernate 会简单地忽略访问我的数据库视图的预期尝试?

【问题讨论】:

    标签: nhibernate nhibernate-mapping


    【解决方案1】:

    我发现视图将属性“x”视为字符串。但在 nHibernate 中,我将其定义为 Int64。这些类型差异很大程度上导致标准失败。但是没有报错?

    【讨论】:

      【解决方案2】:

      仔细检查您的查询是否确实尝试使用您想要的确切类,并且映射也适用于完全相同的类。例如,请注意不同命名空间或程序集中具有相同名称的类。此类问题的一个原因是,如果您尝试查询实际上未在 NHibernate 中映射的类 - 那么 NHibernate 将返回空结果,而不是错误。

      哦,您是否尝试过不使用缓存元素来排除这种情况?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-03
        • 1970-01-01
        • 2014-12-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多