Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 何时可以调用db.SaveChanges()两次?_C#_Asp.net Mvc - Fatal编程技术网

C# 何时可以调用db.SaveChanges()两次?

C# 何时可以调用db.SaveChanges()两次?,c#,asp.net-mvc,C#,Asp.net Mvc,当我从AD获取用户凭据并将其保存到Profiles表中时,我有一个控制器。我还想设置一些用户首选项,但是,为了做到这一点,我需要Id来自Profile我刚刚保存的Preference表 var Profile = new Profile { //Id is auto increment EmpId = viewmodel.EmployeeId; //.... }; db.Profiles.Add(Profile); db.SaveChanges(); 首选项保存: va

当我从AD获取用户凭据并将其保存到
Profiles
表中时,我有一个控制器。我还想设置一些用户首选项,但是,为了做到这一点,我需要
Id
来自
Profile
我刚刚保存的
Preference

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。比如说,保存更改,将id发布到api,检索一些值,然后再次保存更改。我从来没有这样做,实际上,但我有很多次,我需要超过1保存更改。例如,我必须在一个循环中将x数量的数据库记录(包括x数量的相关记录)复制到新记录中

是的,为什么不呢。但您也可以将配置文件分配给导航属性(
新首选项{User=profilewhichitchisnotyetsaved}
),并仅调用一次。此处定义了uc的位置在不执行批处理操作或transactions@Evk那么它是如何查找的,如果一次有100人登录呢?你建议我做
UserId=Profile.Id
?ROFL。。。不,我不是这么说的??我问你在哪里定义uc。
uc
是一个打字错误,我修正了它。我在preference.userId上得到了一个空引用。并不是说我理解得很好,因为它一开始运行得很好。好吧,看来你们的数据关系是这样的?Profiles-->Usersyes,当用户首次登录时,应用程序通过Active Directory获取用户信息,并将其保存到
Profile
表中,作为
首选项
表中相同Id的行
UserId
。请稍候。。配置文件表的主键名为userid吗?