NHibernate 不调用 SQL 服务器
NHibernate not calling SQL Server
此方法被调用。
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 服务器,我可以看到 NHibernate 没有尝试访问服务器。
没有抛出任何错误。它只是 criteria.List()
只是 returns 0 行。
MyStuff
是一个 class
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 与同一项目中的其他 classes/views 配合得很好。
事实上,如果我故意将 HBM 文件中的 "table" 打错为 "XviewXMyStuffX" NHibernate 不会有任何打字错误的问题。为什么 NHibernate 只是忽略了访问我的数据库视图的预期尝试?
我发现视图将属性 "x" 视为字符串。但在 nHibernate 中,我将其定义为 Int64。这些类型差异很大程度上导致标准失败。但是没有报告任何错误?
仔细检查您的查询是否确实尝试使用您想要的 class,并且映射也适用于完全相同的 class。例如,当心 classes 在不同的命名空间或程序集中具有相同的名称。此类问题的一个原因是,如果您尝试查询实际上未在 NHibernate 中映射的 class - 那么 NHibernate 将 return en 空结果,而不是错误。
哦,您是否尝试过不使用缓存元素来排除这种情况?
此方法被调用。
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 服务器,我可以看到 NHibernate 没有尝试访问服务器。
没有抛出任何错误。它只是 criteria.List()
只是 returns 0 行。
MyStuff
是一个 class
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 与同一项目中的其他 classes/views 配合得很好。
事实上,如果我故意将 HBM 文件中的 "table" 打错为 "XviewXMyStuffX" NHibernate 不会有任何打字错误的问题。为什么 NHibernate 只是忽略了访问我的数据库视图的预期尝试?
我发现视图将属性 "x" 视为字符串。但在 nHibernate 中,我将其定义为 Int64。这些类型差异很大程度上导致标准失败。但是没有报告任何错误?
仔细检查您的查询是否确实尝试使用您想要的 class,并且映射也适用于完全相同的 class。例如,当心 classes 在不同的命名空间或程序集中具有相同的名称。此类问题的一个原因是,如果您尝试查询实际上未在 NHibernate 中映射的 class - 那么 NHibernate 将 return en 空结果,而不是错误。
哦,您是否尝试过不使用缓存元素来排除这种情况?