Этот вопрос фактически связан с предыдущим вопросом, который у меня был.Fluent NHibernate: более одной строки с заданным идентификатором для класса
У меня была таблица базы данных TItemListUserPerm с составным первичным ключом, состоящим из трех полей.
TItemListUserPerm
- UserId (PK, FK)
- TItemListID (PK, FK)
- TItemListPermID (PK, FK)
После борьбы с тем, как отобразить это, я пришел к выводу, что проще всего удалить составной первичный ключ, добавить уникальный первичный ключ идентификации и сделать TItemListUserPerm в объект, который я мог бы затем сопоставить.
Результат был:
public class TaskItemListUserPermission {
public int Id { get; set; }
public User User { get; set; }
public TaskItemList TaskItemList { get; set; }
public TaskItemListPermission Permissions{ get; set; }
}
Карта была:
public class TaskItemListUserPermissionMap : ClassMap<TaskItemListUserPermission> {
public TaskItemListUserPermissionMap() {
Table("TtemListUserPerm");
Id(x => x.Id, "TaskItemListUserPermId");
References(x => x.User, "UserId");
References(x => x.Permissions, "TItemListPermID");
References(x => x.TaskItemList, "TItemListID");
}
}
public class TaskItemListMap : ClassMap<TaskItemList> {
Table("TItemList");
Id(x => x.Id, "TItemListID");
....
HasMany<TaskItemListUserPermission>(x => x.UserPermssions)
.Table("TItemListUserPerm")
.KeyColumn("TItemListId")
.AsBag();
}
Все прекрасно работает. Я получаю результаты; не совсем то, что я хочу, но что-то мне кажется, что я могу работать с тем, пока я пишу Linq запросы, как это:
List<TaskItemList> taskItemLists = taskItemListRepository.GetAll() as List<TaskItemList>;
List<TaskItemListUserPermission> permissions = taskItemLists.First().TaskItemListUserPermission.ToList();
var myName= permissions.Where<TaskItemListUserPermission>(x => x.User.FirstName == "FirstNameOfUser" && x.User.LastName == "LastNameOfUser");
Когда я шагая через код, я получаю сообщение об ошибке: Больше чем один ряд с учетом Идентификатор был найден: IdOfUser, для ClassNameOfObject.
Я знаю, что я получаю группу пользователей с тем же идентификатором. Они являются частью объекта, который находится в перечислимом списке. Может ли кто-нибудь пролить свет на то, почему я получаю ошибку и как ее исправить или обойти? Нужно ли использовать Linq-To-NHibernate?
Что такое IdOfUser и ClassNameOfObject? –
Кстати: пожалуйста, постарайтесь задать как можно более короткие и конкретные. Поместите некоторую работу в свою проблему, чтобы найти фактический источник проблемы и спросить об этом. Обычно люди не хотят тратить часы. –
Спасибо за ваш совет, и я рассмотрю его на будущие вопросы. К сожалению, я понятия не имел, каков фактический источник проблемы, и я только задавал вопросы, когда сам не мог найти его (т. Е. Исследовать блоги, группы новостей и т. Д.). Я смог найти источник проблемы и в конце концов нашел решение. – DerHaifisch