2017-03-17 31 views
0

我有以下問題:當我嘗試通過將修改後的用戶進入到我的ModifyUser方法在我UserService課堂上的一切更改用戶的小鎮似乎確定,但變化不會在應用數據庫。實體框架連接沒有更新DB

我想從我的計算器發現了類似的問題的解決,但他們都不工作。

正如他們所說的「一圖勝千個言」看看這個,因爲它更容易理解相比,我的簡短說明。 http://prntscr.com/el51z0

 else if (property == "BornTown") 
     { 
      if (this.townService.TownExists(value)) 
      { 
       User user = this.userService.GetUserByName(username); 

       Town town = this.townService.GetTownByName(value); 
       user.BornTown = town; 

       this.userService.ModifyUser(user); 
      } 
      else 
      { 
       Console.WriteLine($"Value {value} is not valid."); 
       throw new ArgumentException($"Town {value} not found!"); 
      } 
     } 

當我通過用戶對ModifyUser數據庫沒有及時更新,並保持BornTown NULL。

public void ModifyUser(User user) 
    { 
     using (PhotoShareContext context = new PhotoShareContext()) 
     { 
      context.Users.Attach(user); 

      context.Entry(user).State = EntityState.Modified; 

      context.SaveChanges(); 
     } 
    } 
+0

您是否嘗試附加您的用戶鎮? –

+0

是的,仍然沒有變化http://prntscr.com/el59hz –

+0

你是否啓用proxygeneration?你的模型中是否包含FK-s?如果是這樣,如果您嘗試更新用戶實體中的關聯和FK,會發生什麼情況? –

回答

0

你可以嘗試

context.Users.where(x=>x.username == username).FirstOrDefault(); 

,並且不使用any()

你可以檢查你是否得到了正確的用戶名,再次檢查用戶名一旦你找回價值在函數中。

+0

有時.Any()給出問題 – Neha

+0

所有這些事情都正常工作,數據總是正確的,並且用戶始終存在。如果我理解正確,這就是你問的問題? –

+0

是的,這就是我想知道的。 – Neha

0

要不試試下面的代碼:

User user = context.users.where(x=>x.username == username).FirstOrDefault(); 
user.BornTown = town; //string 
context.savechanges(); 
+0

http://prntscr.com/el6l9s這不會改變任何= / –

0

而是直接操作導航屬性嘗試使用它來管理實體關係的外鍵:

Town town = this.townService.GetTownByName(value); user.BornTownId = town.Id;

請記住,如果你有而不是在您的模型實體中創建顯式外鍵您應該映射現有的外鍵:查看「Users」表 - 查看外鍵列的命名方式 - 它應該看起來像UserTown_Id。然後將其放入模型類(您可以添加外鍵屬性或將其映射到模型構建器中)。

增加新的屬性到模型時要小心(它可以讓你的可選關係與所需的「城鎮」)。