Этот вопрос на самом деле связан с предыдущим вопросом, который у меня был.
У меня была таблица базы данных TItemListUserPerm с составным первичным ключом, состоящим из трех полей.
TItemListUserPerm
- Идентификатор пользователя (ПК, ФК)
- TItemListID (ПК, ФК)
- TItemListPermID (ПК, ФК)
После мучений с тем, как сопоставить это, я пришел к выводу, что проще всего будет удалить составной первичный ключ, добавить уникальный первичный ключ идентичности и превратить 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?