由于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();
            }
        }

由于c#和linq的动态代理问题,无法添加记录

也许清理你的代码会有帮助?

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();
        }
    }