Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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
Entity framework 在同一事务中插入、更新、删除实体框架_Entity Framework_Insert - Fatal编程技术网

Entity framework 在同一事务中插入、更新、删除实体框架

Entity framework 在同一事务中插入、更新、删除实体框架,entity-framework,insert,Entity Framework,Insert,我有一个问题,我有一个可以更新数据和插入数据的向导。因此,如果我有一个现有的团队成员列表,我可以更新他们的角色,但如果必要,我还可以向该团队添加/插入一个人。因此,我可以在同一事务中更新角色并将新的团队成员插入同一个表中。数据可以更新到表teamMembers并插入到表teamMembers 当我尝试添加一个新的团队成员时,我还有一个现有成员,我只想更新他的角色。 这两个更改都发生在名为TeamMember的同一个表上。当我调试上下文时,一切看起来都很好。它显示TeamMember表将发生两个更

我有一个问题,我有一个可以更新数据和插入数据的向导。因此,如果我有一个现有的团队成员列表,我可以更新他们的角色,但如果必要,我还可以向该团队添加/插入一个人。因此,我可以在同一事务中更新角色并将新的团队成员插入同一个表中。数据可以更新到表teamMembers并插入到表teamMembers

当我尝试添加一个新的团队成员时,我还有一个现有成员,我只想更新他的角色。 这两个更改都发生在名为TeamMember的同一个表上。当我调试上下文时,一切看起来都很好。它显示TeamMember表将发生两个更改。一个事务是更新,另一个事务是插入。当我使用以下命令执行更新时:

var teamMember = new TeamMember
{
    Name = user.FullName,
    UserProfileId = user.UserProfileId,
    RoleId = user.RoleId
};

TeamMemberList.Add(teamMember);
project.TeamMembers = TeamMemberList;

//And then call 
this.Context.Projects.Attach(project);
this.Context.Entry(project).State = System.Data.EntityState.Modified;
它会更新,但需要插入的记录失败

如何在同一事务中同时插入和更新同一个表

当前错误为:


已成功提交对数据库的更改,但更新对象上下文时出错。ObjectContext可能处于不一致的状态。内部异常消息:发生引用完整性约束冲突:定义引用约束的属性值在关系中的主体对象和从属对象之间不一致。

首先加载现有项目实体,然后添加成员如何

var project = this.Context.Project.Where(p => p.ID = "bar").Include("TeamMembers").FirstOrDefault();

var teamMember= new TeamMember
{
    Name = user.FullName,
    UserProfileId = user.UserProfileId,
    RoleId = user.RoleId
};

project.TeamMembers.Add(teamMember);

this.Context.SaveChanges()

我认为您需要将TeamMember实体添加到上下文的全局列表中。比如:

var teamMember = new TeamMember()
{
  Name = user.FullName,
  UserProfileId = user.UserProfileId,
  RoleId = user.RoleId
}

project.TeamMembers.Add( teamMember );
this.Context.TeamMembers.Add( teamMember );

this.Context.SaveChanges();

谢谢,成功了。是否有任何信息可以解释为什么需要填充本地和全局上下文?本地是指项目实体上的TeamMembers集合?如果是这样,这实际上是将团队成员链接到项目实体。如果“项目”属性在TeamMember实体上公开,那么也可以通过“项目”属性完成。