Этот вопрос на самом деле связан с предыдущим вопросом, который у меня был.
У меня была таблица базы данных 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?