2017-11-17 150 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

相关问题