У меня есть модель Project, у которой есть свойство типа IProjectWorker, это может быть либо отдельный пользователь, либо команда. В замке 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?