2017-11-17 149 views
1

我有一個控制器,當我從AD獲取用戶證書並將其保存到Profiles表中時。我也想設置一些用戶首選項,但是,爲了做到這一點,我需要IdProfile我剛剛保存在Preference表中。什麼時候可以調用db.SaveChanges()兩次?

var Profile = new Profile 
{ 
    //Id is auto increment 
    EmpId = viewmodel.EmployeeId; 
    //.... 
}; 
db.Profiles.Add(Profile); 
db.SaveChanges(); 

偏好保存:

var user = User.Identity.Name; 
var getUser = (from gu in db.Profiles where user == gu.EmployeeId select gu.Id).Single(); 
var Preference = new Preference 
{ 
    UserId = getUser, 
    //... 
}; 
db.Preferences.Add(Preference); 
db.SaveChanges(); 

在這種情況下,這是可以接受的?

+0

是的,爲什麼不。但是,您也可以將配置文件分配給導航屬性('new Preference {User = profileWhichIsNotYetSaved}'),並且只調用一次。 – Evk

+0

這裏定義的是uc – Harry

+0

在你沒有進行批量操作和交易的任何時刻,它是可以接受的嗎 –

回答

1

它看起來像你的變量getUser(請重命名這個變量)最終成爲新保存的配置文件ID ..雖然你沒有告訴我們你在哪裏定義uc。無論如何讓我告訴你實體框架的魔力。

var profile = new Profile 
{ 
    //Id is auto increment 
    EmpId = viewmodel.EmployeeId; 
    //.... 
}; 
var preference = new Preference 
{ 
    //... 
}; 

profile.Preferences.Add(preference;) 
db.Profiles.Add(profile); 
db.SaveChanges(); 

因此,您可以看到您不必要地使用了多個SaveChanges。有時您需要有多個SaveChanges。比如讓我們說你SaveChanges,發佈一個id到api,檢索一些值並保存更改。我從來沒有必要這樣做,但我有時候需要超過1次保存更改。例如,我必須將x數量的數據庫記錄(包括x個相關記錄)複製到循環中的新記錄中。

+0

'uc'是我修復它的錯字 – Skullomania

+0

skullomania你嘗試做我在這裏回答的問題嗎? – Harry

+0

我在preference.userId上得到了一個null引用。不是因爲它起初運作良好,所以我都很瞭解。 – Skullomania

相關問題