我有一个有趣的小问题。我的控制器使用两个表为我的模型中的属性赋值。在其中一个表格中,我有一些我刚才提到的条目,还有一些我刚刚添加的条目。旧条目正在正确分配值,但新条目指定为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;
}
答案 0 :(得分:1)
我看到的问题是这个数据库设计有点差,特定记录陷入了糟糕设计的陷阱。请考虑您在该表上有两个ID:
SYSUserProfileID
SYSUserID
这通常表明设计不好(虽然我不确定你是否可以改变它),如果可以的话,你应该合并使用SYSUserID
的任何东西来使用{{1 }}
这很糟糕,因为最后一行有两个不同的ID。当您使用SYSUserProfileID
实体框架时,将查找该行的db.Find(someId)
主键(在此情况下为SYSUserProfileID
)。但是通过它的声音,您还需要通过19
找到该行SYSUserID
。
就个人而言,如果可能的话,我会抛弃28
。否则,您需要更正代码,以便它在正确的时间查找正确的ID列(将来这将是一个庞大的PITA),或者更正该记录以便SYSUserID
和{{1} } 比赛。其中任何一个都应该修复此问题,但更改该记录可能会破坏其他内容。