C# EntityFramework 5代码相同类型的第一个子父级未更新/保存
我有一个名为Section的C# EntityFramework 5代码相同类型的第一个子父级未更新/保存,c#,asp.net-mvc,ef-code-first,entity-framework-5,C#,Asp.net Mvc,Ef Code First,Entity Framework 5,我有一个名为Section的类 public class Section { public Section() { construct(0); } public Section(int order) { construct(order); } private void construct(int order) { Children = new List<Section>(); Fields = new List<
类
public class Section
{
public Section() { construct(0); }
public Section(int order) { construct(order); }
private void construct(int order)
{
Children = new List<Section>();
Fields = new List<XfaField>();
Hint = new Hint();
Order = order;
}
[Key]
public int Id { get; set; }
public int FormId { get; set; }
public string Name { get; set; }
[InverseProperty("Parent")]
public List<Section> Children { get; set; }
public List<XfaField> Fields { get; set; }
public Section Parent { get; set; }
public Hint Hint { get; set; }
public int Order { get; private set; }
#region Methods
public void AddNewChild()
{
AddChild(new Section
{
Name = "New Child Section",
FormId = FormId,
});
}
private void AddChild(Section child)
{
child.Parent = this;
if (Children == null) Children = new List<Section>();
int maxOrder = -1;
if(Children.Count() > 0) maxOrder = Children.Max(x => x.Order);
child.Order = ++maxOrder;
Children.Add(child);
FactoryTools.Factory.PdfSections.Add(child);
}
// Other methods here
#endregion
}
当我查看数据库时,我看到添加了一个新行,例如:
Id Name Parent_Id Hint_Id FormId Order
19 New Child Section 1 27 1 0
但是,当我加载父部分
时,子项
属性始终为计数
0,如下所示:
private void AddChildSection()
{
var parent = FactoryTools.Factory.PdfSections.FirstOrDefault(x => x.Id == ParentId);
if (parent == null) throw new Exception("Unable to create child because parent with Id " + ParentId.ToString() + " doesn't exist.");
parent.AddNewChild();
FactoryTools.Factory.SaveChanges();
}
public ActionResult EditSection(int formId, int sectionId)
{
var model = FactoryTools.Factory.PdfSections.FirstOrDefault(x => x.Id == sectionId);
if (model == null || model.FormId != formId) model = new Section();
//model.Children = FactoryTools.Factory.PdfSections.Where(x => x.Parent.Id == sectionId).ToList();
return PartialView(model);
}
当然,当我手动添加子项时,它们就在那里(在上面的代码中,通过取消注释model.children=…
行)
我已经习惯了NHibernate的做事方式,因此对于上述看似简单的任务在EntityFramework中不起作用感到非常沮丧,我做错了什么?Entity Framework不会急于加载相关的实体。尝试强制它包含子项:
var model = FactoryTools.Factory.PdfSections.Include("Children").FirstOrDefault(x => x.Id == sectionId);
还有一个强类型重载,您可以将lambda传递给它:
var model = FactoryTools.Factory.PdfSections.Include(s => s.Children).FirstOrDefault(x => x.Id == sectionId);
哪个程序集允许我访问强类型版本?Nm,刚刚找到它
System.Data.Entity