这个问题实际上与我以前的问题有关。
我有一个数据库表TItemListUserPerm,其复合主键由三个字段组成。
TItemListUserPerm
在努力解决这个问题之后,我得出的结论是,最简单的方法是删除复合主键,添加唯一的身份主键,然后将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 :(得分:0)
问题最终导致类中的不匹配,特别是User类。我通过在类映射中注释引用来缩小源,直到没有收到错误。一旦我这样做,我就能够推断出这个问题。我很感激任何看过这个问题但试图回答它的人。