我有以下实体
public class Item
{
public int Id { get; set; }
public string Name { get; set; }
public Sections Sections { get; set; }
}
public class Section
{
public int ID { get; set; }
public string Name { get; set; }
}
public class Sections : List<Section>, ICollection<Section>
{ }
我添加了一个项目 ID 为 1 的新项目,但其中没有任何部分......
现在我想修改该项目并在其中添加新部分,为此,我在上下文中检索该项目并将其保存在另一个上下文中。在这里,我必须使用两个单独的上下文,因为不确定用户何时要更新对象。在那之前我不能保持上下文对象打开。
Item fAp;
using (var ctx = new MyContext())
{
fAp = ctx.Items.Include(a => a.Sections).Single(a => a.Id == 1);
}
using (var ctx2 = new MyContext())
{
var nsec = new Section()
{
ID = 1,
Name = "App Sec...1"
};
fAp.Sections.Add(nsec);
ctx2.Entry(fAp).State = EntityState.Modified;
ctx2.SaveChanges();
}
通过这样做,新的部分没有被添加到数据库中。然后我在调用 ctx2.SaveChanges() 之前修改了代码并添加了以下行。
ctx2.Entry(nsec).State = EntityState.Added;
已成功保存。
现在,我的问题是我有非常复杂的数据层次结构,我的意思是 Section 类也有很多子导航属性,这些属性还有很多,等等。
跟踪所有此类属性并手动设置它们的状态将非常困难。在这种情况下如何更新数据?
还有一件事,我不会使用急切加载,我的意思是在检索 Item 对象时我不会使用“包含”。我将在需要时使用显式加载,最后想要更新对象。
有什么最好的建议吗?