MVC Model使用旧表条目的值,但新条目返回NULL

时间:2017-02-04 08:33:34

标签: sql-server asp.net-mvc entity-framework model

我有一个有趣的小问题。我的控制器使用两个表为我的模型中的属性赋值。在其中一个表格中,我有一些我刚才提到的条目,还有一些我刚刚添加的条目。旧条目正在正确分配值,但新条目指定为NULL,即使它们位于 相同 表中并且以相同方式创建。

控制器

    [HttpPost]
    [Authorize]
    public ActionResult VerifyReservationInfo(RoomDataView model)
    {

        string loginName = User.Identity.Name;
        UserManager UM = new UserManager();
        UserProfileView UPV = UM.GetUserProfile(UM.GetUserID(loginName));

        RoomAndReservationModel RoomResModel = new RoomAndReservationModel();
        List<RoomProfileView> RoomsSelectedList = new List<RoomProfileView>();

        GetSelectedRooms(model, RoomsSelectedList);

        RoomResModel.RoomResRmProfile = RoomsSelectedList;
        RoomResModel.GuestId = UPV.SYSUserID;
        RoomResModel.FirstName = UPV.FirstName;
        RoomResModel.LastName = UPV.LastName;
        RoomResModel.PhoneNumber = UPV.PhoneNumber;

        return View(RoomResModel);

    }

来自经理的GetUserProfile

    public UserProfileView GetUserProfile(int userID)
    {
        UserProfileView UPV = new UserProfileView();
        ResortDBEntities db = new ResortDBEntities();
        {
            var user = db.SYSUsers.Find(userID);
            if (user != null)
            {
                UPV.SYSUserID = user.SYSUserID;
                UPV.LoginName = user.LoginName;
                UPV.Password = user.PasswordEncryptedText;

                var SUP = db.SYSUserProfiles.Find(userID);
                if (SUP != null)
                {
                    UPV.FirstName = SUP.FirstName;
                    UPV.LastName = SUP.LastName;
                    UPV.PhoneNumber = SUP.PhoneNumber;
                    UPV.Gender = SUP.Gender;
                }

                var SUR = db.SYSUserRoles.Find(userID);
                if (SUR != null)
                {
                    UPV.LOOKUPRoleID = SUR.LOOKUPRoleID;
                    UPV.RoleName = SUR.LOOKUPRole.RoleName;
                    UPV.IsRoleActive = SUR.IsActive;
                }
            }
        }
        return UPV;
    }

enter image description here

1 个答案:

答案 0 :(得分:1)

我看到的问题是这个数据库设计有点差,特定记录陷入了糟糕设计的陷阱。请考虑您在该表上有两个ID:

SYSUserProfileID
SYSUserID

这通常表明设计不好(虽然我不确定你是否可以改变它),如果可以的话,你应该合并使用SYSUserID的任何东西来使用{{1 }}

这很糟糕,因为最后一行有两个不同的ID。当您使用SYSUserProfileID实体框架时,将查找该行的db.Find(someId)主键(在此情况下为SYSUserProfileID)。但是通过它的声音,您还需要通过19找到该行SYSUserID

就个人而言,如果可能的话,我会抛弃28。否则,您需要更正代码,以便它在正确的时间查找正确的ID列(将来这将是一个庞大的PITA),或者更正该记录以便SYSUserID和{{1} } 比赛。其中任何一个都应该修复问题,但更改该记录可能会破坏其他内容。