我的项目模型具有IProjectWorker类型的属性,可以是单个用户,也可以是团队。在Castle ActiveRecord中,它的定义如下:
[Any(typeof(int), MetaType = typeof(string), TypeColumn = "WorkerType", IdColumn = "WorkerID", Cascade = CascadeEnum.None)]
[Any.MetaValue("USER", typeof(User))]
[Any.MetaValue("TEAM", typeof(Team))]
public IProjectWorker Worker { get; set; }
现在我需要能够搜索工作者姓名包含一些文本的项目。我最初的反应是这样的:
query
.CreateAlias("Worker", "Worker")
.Add(Restrictions.InsensitiveLike("Worker.WorkerName", SearchText, MatchMode.Anywhere));
但这给了我一个错误 - “任何类型都没有唯一的引用持久性”。这是有道理的,它不知道如何处理连接到两个不同的表进行搜索。
我可以为每个表创建两个不同的别名,并在它们之间执行Restrictions.Or()吗?我试过了,但不能完全正确。或者是否有其他方法可以使用我缺少的标准来做到这一点?或者我将不得不使用HQL?