我有一个UserAccount
课程,可能属于Employee
或Client
我不知道如何使用过滤器来查询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;
}
答案 0 :(得分:1)
想到两种可能的方法。我无法自由测试其中哪一项目前有效。
Restrictions.IdEq(object)
(在NHibernate.Criterion
命名空间中),这样您就不必参考实际的Id
属性,... Client
和Employee
实现具有IUserOwner
属性的Id
接口。我希望当我有更多时间时,我有机会回来并改进这个答案。