我们是否必须显式添加到数据库上下文?

时间:2018-06-21 19:07:57

标签: c# sql-server entity-framework-core asp.net-core-2.0

public class Practice
{
    public List<Participation> Participation { get; set; }
}

public class Participation
{
    public string Id { get; set; }
    public virtual Practice Practice { get; set; }
}

public void test()
{
    var practice = _ctx.Practice.SingleOrDefault(p => p.Id == practiceId);
    practice.Participations.AddRange(NewParticipations);
    _ctx.Participation.AddRange(NewParticipations)
    await _ctx.SaveChangesAsync();
}

如果我具备上述条件,我是否需要在test函数中使用第三行来保存新的参与状态,或者Practice.Participations.AddRange()会隐式处理此问题?

2 个答案:

答案 0 :(得分:1)

practice.Participations.AddRange应该足够了。

  

如果从上下文已跟踪的实体的导航属性中引用新实体,则将发现该实体并将其插入数据库。

来源:https://docs.microsoft.com/en-us/ef/core/saving/related-data#adding-a-related-entity

您可以像这样观察它...

var practice = _ctx.Practice.SingleOrDefault(p => p.Id == practiceId);

practice.Participations.AddRange(NewParticipations);

Debug.WriteLine(_ctx.Participation.Count()); //note count

await _ctx.SaveChangesAsync();

Debug.WriteLine(_ctx.Participation.Count()); //count increased

答案 1 :(得分:0)

您应该能够以任何一种方式将新数据添加到数据库中。如果通过上下文进行添加,则需要自己在NewParticipations对象中设置外键,以便存在指向Practice对象的链接。