由于c#和linq的动态代理问题,无法添加记录
本文关键字:添加 加记录 问题 代理 linq 动态 由于 | 更新日期: 2023-09-27 18:14:10
我在不同的地方调用下面的函数。基本上,我有一个列表- UserList,它充满了UserListItems。在这种情况下,它是一个硬编码的"经理"列表。我可以创建经理的列表很好,但我需要运行这个过程,以确保一切都是最新的。是否添加、删除了任何管理器等?因此,我首先从Member表中构建一个管理人员列表(这是最新的)。然后得到保存在UserList表中的管理器列表。下面的foreach应该检查Member表中是否有比UserList中更多的管理器。如果有额外的,他们应该添加为用户列表。我的问题是,当我保存更改时,我得到以下错误:
无法强制转换类型的对象"System.Data.Entity.DynamicProxies.ApplicationUser…打字system . string’"。
userlisttitem表只是一个关系表,并且包含字段
- UserListItemId
- UserListId
- UserId
和userId和UserListId在调试时似乎都是正确的。我错过了什么?
public void UpdateManagerList()
{
var member = GetUserMember();
var managerList = db.UserList.Where(u => u.Name == "Managers" && u.OrgId == member.OrgId).FirstOrDefault();
var listId = managerList.O_UserListId;
// list and user ids for up to date managers.
List<O_Member> ManagersCur = db.O_MemberWhere(u => u.OrgId == member.OrgId && u.Manage == true && u.JoinedStored == true).ToList();
List<string> curUserIds = ManagersCur.Select(u => u.UserId).ToList();
//list of managers stored in userlist
List<UserListItem> ManagersList = db.UserListItem.Where(u => u.UserListId == listId).ToList();
List<string> listUserIds = ManagersList.Select(u => u.UserId).ToList();
foreach (var item in ManagersCur)
{
var mUser = ManagersList.Where(u => listUserIds.Contains(item.UserId)).FirstOrDefault();
if (mUser != null)
{
continue;
}
else
{
string userId = item.UserId;
UserListItem newUser = new UserListItem();
newUser.UserListId = listId;
newUser.UserId = userId;
db.UserListItem.Add(newUser);
db.SaveChanges();
}
}
也许清理你的代码会有帮助?
public void UpdateManagerList() {
var member = GetUserMember();
var managerList = db.UserList.Where(u => u.Name == "Managers" && u.OrgId == member.OrgId).FirstOrDefault();
var listId = managerList.O_UserListId;
// list and user ids for up to date managers.
List<O_Member> ManagersCur = db.O_MemberWhere(u => u.OrgId == member.OrgId && u.Manage == true && u.JoinedStored == true).ToList();
List<string> curUserIds = ManagersCur.Select(u => u.UserId).ToList();
//list of managers stored in userlist
List<UserListItem> ManagersList = db.UserListItem.Where(u => u.UserListId == listId).ToList();
List<string> listUserIds = ManagersList.Select(u => u.UserId).ToList();
foreach (var curMgrId in curUserIds) {
if (!listUserIds.Contains(curMgrId)) {
var newUserLI = new UserListItem();
newUserLI.UserListId = listId;
newUserLI.UserId = curMgrId;
db.UserListItem.Add(newUserLI);
db.SaveChanges();
}
}