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