什么时候可以调用db.SaveChanges()两次?
我有一个控制器,当我从AD获取用户证书并将其保存到Profiles
表中时。我也想设置一些用户首选项,但是,为了做到这一点,我需要Id
从Profile
我刚刚保存在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();
在这种情况下,这是可以接受的?
它看起来像你的变量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个相关记录)复制到循环中的新记录中。
'uc'是我修复它的错字 – Skullomania
skullomania你尝试做我在这里回答的问题吗? – Harry
我在preference.userId上得到了一个null引用。不是因为它起初运作良好,所以我都很了解。 – Skullomania
是的,为什么不。但是,您也可以将配置文件分配给导航属性('new Preference {User = profileWhichIsNotYetSaved}'),并且只调用一次。 – Evk
这里定义的是uc – Harry
在你没有进行批量操作和交易的任何时刻,它是可以接受的吗 –