2017-02-04 67 views
2

我有一個有趣的小問題。我的控制器使用兩個表爲我的模型中的屬性賦值。在其中一張表格中,我有一些我剛纔提到的條目,還有一些我最近剛添加的條目。舊條目被正確賦值,但新條目分配NULL,即使它們在相同的表中並且以相同方式創建。MVC模型使用舊錶條目的值,但新條目返回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

+0

你的代碼需要在問題中(而不是鏈接到它的圖像) –

+0

我不能顯示錶格,我可以嗎? – Stormseye

+0

Downvote,因爲我試圖張貼圖片來更好地解釋我的問題?這很好。 – Stormseye

回答

1

我看到的問題是,這個數據庫有一個稍差的設計,並特定記錄陷入了那種糟糕的設計陷阱。想想看,你有兩個ID的那張桌子上:

SYSUserProfileID 
SYSUserID 

這通常是一個不好的設計的指示(雖然我不知道你可以改變它),如果你能,你應該合併任何使用SYSUserID來使用SYSUserProfileID

這是不好的,因爲最後一行有兩個不同的ID。當您使用db.Find(someId)實體框架將查找該行的主鍵(SYSUserProfileID),該行爲19。但通過它的聲音,您還需要通過SYSUserID(該行爲28)找到它。

就個人而言,如果可能的話,我會盡力溝通SYSUserID。否則,您需要更正代碼,以便在正確的時間查找正確的ID列(未來這將是一個龐大的PITA),或更正該記錄,以便SYSUserIDSYSUserProfileID匹配。這些都應該修復這個的問題,但改變那個記錄可能打破別的東西。

+0

謝謝,那正是問題所在。我通過簡單地將配置文件表中的主鍵從SYSUserProfileID列更改爲SYSUserID列來修復它,我需要這一列,因爲它與用戶的登錄信息相關聯。非常感謝您的幫助, – Stormseye