FluentNHibernate - ReferencesAny(),如何将QueryOver与过滤器一起使用?

时间:2014-02-21 16:54:25

标签: c# nhibernate orm fluent-nhibernate

我有一个UserAccount课程,可能属于EmployeeClient

我不知道如何使用过滤器来查询object 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);
   }
}

内部服务:

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;
}

1 个答案:

答案 0 :(得分:1)

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

  • 看看您是否可以使用Restrictions.IdEq(object)(在NHibernate.Criterion命名空间中),这样您就不必参考实际的Id属性,...
  • ...或者您可以尝试ClientEmployee实现具有IUserOwner属性的Id接口。

我希望当我有更多时间时,我有机会回来并改进这个答案。