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列来修复它,我需要它,因为它与用户的登录信息相关。谢谢你的帮助,