C# FluentNHibernate-ReferencesAny(),如何将QueryOver与筛选器一起使用?

C# FluentNHibernate-ReferencesAny(),如何将QueryOver与筛选器一起使用?,c#,nhibernate,orm,fluent-nhibernate,C#,Nhibernate,Orm,Fluent Nhibernate,我有一个UserAccount类,它可能属于员工或客户 我不知道如何使用过滤器查询对象OwnerRefObject字段 例如: public class UserAccount { public virtual int Id {get;set;} public virtual string UserName {get;set;} public virtual string Password {get;set;} public virtual object OwnerRef

我有一个
UserAccount
类,它可能属于
员工
客户

我不知道如何使用过滤器查询
对象OwnerRefObject
字段

例如:

public class UserAccount
{
   public virtual int Id {get;set;}
   public virtual string UserName {get;set;}
   public virtual string Password {get;set;}
   public virtual object OwnerRefObject {get;set;}
}

public class UserMap:ClassMap<User>
{
   public UserMap()
   {
      Id(x => x.Id).GeneratedBy.Indentity();
      Map(x => x.UserName);
      Map(x => x.Password);
      ReferencesAny(x => x.OwnerRefObject)
        .IdentityType<int>()
        .EntityTypeColumn("OwnerObject_Type")
        .EntityIdentifierColumn("OwnerObject_Id")
        .AddMetaValue<Client>(typeof(Client).Name)
        .AddMetaValue<Employee>(typeof(Employee).Name);
   }
}

我想到了两种可能的方法。目前,我无法自由地测试其中哪种方法有效

  • 查看是否可以使用
    Restrictions.IdEq(object)
    (在
    NHibernate.criteria
    命名空间中),这样就不必引用实际的
    Id
    属性
  • 。。。或者您可以尝试让
    Client
    Employee
    实现一个具有
    Id
    属性的
    IUserOwner
    接口

我希望我有更多的时间回来完善这个答案。

谢谢!我也在考虑一个接口。你的最终解决方案是什么?使用这个界面或者其他更好的方法有效吗?
public UserAccount GetClientUserAccountByClientId(int clientId)
{
   var result = _userAccountRepository
       .QueryOver()
       .Where(x => x.OwnerRefObject is Client)
        // Here I want something like (x => x.OwnerRefObject.Id==clientId)
       .Future()
       .FirstOrDefault();

   return result;
}