2011-02-27 2 views
0

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

+0

Что такое IdOfUser и ClassNameOfObject? –

+0

Кстати: пожалуйста, постарайтесь задать как можно более короткие и конкретные. Поместите некоторую работу в свою проблему, чтобы найти фактический источник проблемы и спросить об этом. Обычно люди не хотят тратить часы. –

+0

Спасибо за ваш совет, и я рассмотрю его на будущие вопросы. К сожалению, я понятия не имел, каков фактический источник проблемы, и я только задавал вопросы, когда сам не мог найти его (т. Е. Исследовать блоги, группы новостей и т. Д.). Я смог найти источник проблемы и в конце концов нашел решение. – DerHaifisch

ответ

0

Проблема в конечном итоге оказалась несоответствием в классах, в частности для класса User. Я сузил источник, комментируя ссылки на карте классов, пока не получится никаких ошибок. Как только я это сделал, я смог вывести проблему. Я ценю любого, кто посмотрел на этот вопрос и попытался ответить на него.

Смежные вопросы