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()会隐式处理此问题?
答案 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对象的链接。