首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用<any>映射的NHibernate查询

使用<any>映射的NHibernate查询
EN

Stack Overflow用户
提问于 2012-04-05 18:06:37
回答 1查看 1.5K关注 0票数 1

我使用的是Microsoft SQL Server2005数据库、C# 4.0和以下域的NHibernate 3.2.0:

代码语言:javascript
复制
public class Foo
{
   public virtual Guid Id { get; set; }
   public virtual IBar MyBar { get; set; }
}
public interface IBar
{
   Guid Id { get; set; }
}
public class CocktailBar : IBar
{
   public virtual Guid Id { get; set; }
   public virtual string Name { get; set; }
}
public class ProgressBar : IBar
{
   public virtual Guid Id { get; set; }
   public virtual int Progress { get; set; }
}

和映射

代码语言:javascript
复制
<hibernate-mapping>
   <class name="Foo" table="FOO">
     <id name="Id">
        <generator class="guid.comb"/>
     </id>
     <any name="MyBar" meta-type="System.Guid" id-type="System.Guid">
        <meta-value class="MyNamespace.CocktailBar" value="716B5C04-4115-47BF-BE8A-A3B34D3607FC"/>
        <meta-value class="MyNamespace.ProgressBar" value="65412938-C2DE-48FF-9E90-009881DBDD4F"/>
        <column name="TypeOfBarId"/>
        <column name="BarObjectId"/>
     </any>
   </class>
</hibernate-mapping>

现在,我尝试创建一个查询,该查询返回与名为"Nightbar“的CocktailBar相关联的所有Foo对象。如何创建此查询?NHibernate参考文档中没有介绍在查询( HQL、Criteria或QueryOver)中使用隐式多态性。

我尝试了以下几种方法:

代码语言:javascript
复制
Foo theFoo = session.QueryOver<Foo>()
         .Where(c => c.MyBar.GetType().Name == "CocktailBar")
         .JoinQueryOver<IBar>(c => c.MyBar)
         .Where(c => ((CocktailBar)c).Name == "Nightbar")
         .SingleOrDefault<Foo>();

并在NHibernate.Type.AnyType.GetAssociatedEntityName中得到了异常:"System.InvalidOperationException :任何类型都没有唯一的引用持续器“。

EN

回答 1

Stack Overflow用户

发布于 2012-04-07 19:45:35

代码语言:javascript
复制
Foo theFoo = session.QueryOver<Foo>()
     .Where(Restrictions.Eq("MyBar.class", typeOf(CocktailBar))) <-- here
     .JoinQueryOver<IBar>(c => c.MyBar)
     .Where(c => ((CocktailBar)c).Name == "Nightbar")
     .SingleOrDefault<Foo>();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10026577

复制
相关文章

相似问题

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