2013-12-10 82 views
0

從數據庫更新的屬性我有一個put方法在我MVC4的Web API是這樣的:不包括使用實體框架

public HttpResponseMessage PutUser(int id, User user) 
{ 
    if(!Modelstate.IsValid) 
    { 
     return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Modelstate invalid"); 
    } 
    // etc... 
} 

我的用戶模型是這樣的:

public Class User 
{ 
    public int ID { get; set; } 
    public string Password { 
     set 
     { 
      PasswordHash = HashPassword(value); 
     } 
    } 
    [Required] 
    public string PasswordHash { get; set; } 
} 

現在當我調用我的put方法時,我的Modelstate無效,因爲我的PasswordHash沒有設置。我不想更新密碼,所以很自然,我沒有設置它。如何讓我的模型狀態有效並且不更新密碼哈希字段?我試着用綁定(排除)排除它,我試圖用同樣的方法包含它。

+0

爲什麼它有'Required'屬性呢? –

+0

因爲它在數據庫中是必需的。 –

+0

好的,然後創建一個'UserViewModel',只要你在視圖中需要除了'PasswordHash'就可以了。將它傳遞給視圖,當你在控制器中接收到它時,就像你現在正在做的那樣,然後將'ViewModel'映射到你的用戶''User'中的實際'Entity'。保存它,你就完成了。 –

回答

0

我結束了使用ViewModel和AutoMapper。

視圖模型:

public Class UserViewModel 
{ 
    public int ID { get; set; } 
} 

Put方法:

public HttpResponseMessage PutUser(UserViewModel user) 
{ 
    Mapper.CreateMap<UserViewModel, User>(); 
    User user = db.Get(user.ID); 
    Mapper.Map(user, oldUser); 

    if(!Modelstate.IsValid) 
    { 
     return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Modelstate invalid"); 
    } 
    // etc... 
} 

您可以使用AutoMapper安裝的NuGet。

+1

Mapper.CreateMap應該只執行一次,例如Global.asax –