提问者:小点点

这是否会将实体添加到数据库中两次?


我有两个表,sr_leagures和sr_programs。SR_Programs与sr_leagues有一对多的关系。

我有以下使用实体框架的代码:

var newProgram = new SR_Programs
{
    // Set Properties
    Leagues = new List<SR_Leagues>()
};

ctx.SR_Programs.Add(newProgram);

SR_Leagues tmpLeague = new SR_Leagues
{
     // Set properties
};

那么这就是我要问的部分:

ctx.SR_Leagues.Add(tmpLeague);
if (newProgram.Leagues != null)
{
    newProgram.Leagues.Add(tmpLeague);
}

然后关闭DB上下文

ctx.SaveChanges();

这是否会两次将TMPleague实体添加到数据库中?一旦附加到newprogram并添加到sr_leagues表?

或者EF会因为两者的关系而知道自己是同一个实体吗?


共2个答案

匿名用户

没有理由打电话

ctx.SR_Leagues.Add(tmpLeague);

何时

newProgram.Leagues.Add(tmpLeague);

正在被召唤。

它们都将sr_leagours对象的状态跟踪属性设置为Added。

实体框架将只发出一条与此对象相关的insert语句。

匿名用户

这是否会两次将tmpLeague实体添加到数据库中?

不,但你不需要这么做

或者EF会因为两者的关系而知道自己是同一个实体吗?

是的,但你不需要这么做

var newProgram = new SR_Programs
{
    // Set Properties
    Leagues = new List<SR_Leagues>()
};

ctx.SR_Programs.Add(newProgram);

newProgram.Leagues.Add(new SR_Leagues
{
     // Set properties
});


await context.SaveChangesAsync()