流畅的NHibernate:具有给定的类标识符的多行

时间:2011-02-27 19:21:54

标签: linq fluent-nhibernate linq-to-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吗?

1 个答案:

答案 0 :(得分:0)

问题最终导致类中的不匹配,特别是User类。我通过在类映射中注释引用来缩小源,直到没有收到错误。一旦我这样做,我就能够推断出这个问题。我很感激任何看过这个问题但试图回答它的人。