Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server MVC模型对旧表条目使用值,但新条目返回NULL_Sql Server_Asp.net Mvc_Entity Framework_Model - Fatal编程技术网

Sql server MVC模型对旧表条目使用值,但新条目返回NULL

Sql server MVC模型对旧表条目使用值,但新条目返回NULL,sql-server,asp.net-mvc,entity-framework,model,Sql Server,Asp.net Mvc,Entity Framework,Model,我有一个有趣的小问题。我的控制器正在使用两个表为模型中的属性赋值。在其中一个表中,我有一些我刚才做的条目,还有一些我最近刚刚添加的条目。旧条目的赋值正确,但新条目的赋值为空,即使它们在相同的表中并且是以相同的方式创建的 控制器 [HttpPost] [Authorize] public ActionResult VerifyReservationInfo(RoomDataView model) { string loginName = User.

我有一个有趣的小问题。我的控制器正在使用两个表为模型中的属性赋值。在其中一个表中,我有一些我刚才做的条目,还有一些我最近刚刚添加的条目。旧条目的赋值正确,但新条目的赋值为空,即使它们在相同的表中并且是以相同的方式创建的

控制器

    [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);

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

我看到的问题是,这个数据库的设计有点糟糕,而那个特定的记录落入了设计糟糕的陷阱。考虑一下你在表格上有两个ID:

SYSUserProfileID
SYSUserID
这通常表明设计不好(尽管我不确定您是否可以更改它),如果可以,您应该将使用
SYSUserID
的任何内容合并到使用
SYSUserProfileID

这很糟糕,因为最后一行有两个不同的ID。当您使用
db.Find(someId)
Entity框架将查找该行的主键(
SYSUserProfileID
),即
19
。但是根据它的发音,您还需要通过该行的
SYSUserID
找到它,这是
28


就我个人而言,如果可能的话,我会抛弃
SYSUserID
。否则,您需要更正代码,以便它在正确的时间查找正确的ID列(这在将来将是一个巨大的PITA),或者更正该记录,以便
SYSUserID
SYSUserProfileID
匹配。这两种方法都可以解决此问题,但更改该记录可能会破坏其他内容。

您的代码需要在问题中(而不是链接到它的图像)。我无法显示表格,可以吗?因为我试图发布图片来更好地解释我的问题,所以我投了反对票?很好。包括图像没有问题,但是你的代码需要在问题中。好的,我理解。我以后会这么做的。在这里编辑代码,我将添加一个链接到表格截图,只是为了澄清。谢谢你的信息和核心删除。谢谢,这正是问题所在。我通过简单地将Profile表中的主键从SYSUserProfileID列更改为SYSUserID列来修复它,我需要它,因为它与用户的登录信息相关。谢谢你的帮助,