我有一个模型集合:
[Table("Templates")]
public class Template
{
[Key]
public Guid ID { get; set; }
public virtual IList<TemplateSection> Sections { get; set; }
}
[Table("TemplateSections")]
public class TemplateSection
{
internal TemplateSection() { Fields = new List<TemplateField>(); }
[Key]
public Guid ID { get; set; }
[Required]
public Guid TemplateID { get; set; }
public virtual Template Template { get; set; }
}
这似乎可以在数据库中创建正确的关系。
当我更新我的数据库时,我添加的任何部分都不会保存到数据库中。这是我如何更新dabatase:
Template existingtemplate = db.Templates.Find(sltemplate.ID);
db.Entry(existingtemplate).CurrentValues.SetValues(template);
db.SaveChanges();
如果我在existingtemplate
之前更新检查db.SaveChanges();
,则Sections集合为空。任何其他更改都已更新到existingtemplate
。
如果我添加:
existingtemplate.Sections = template.Sections;
在db.SaveChanges();
之前,这些部分将保存到数据库中,但如果我再次加载模板则不会重新加载。
显然我在宣布一对多的关系时遗漏了一些东西,但是读过几十篇文章后我看不出它会是什么。
答案 0 :(得分:1)
构造CurrentValues.SetValues
仅设置标量属性,换句话说,非导航属性。
我有点惊讶existingtemplate.Sections = template.Sections;
显然保存了TemplateSection
个对象,但没有建立关联。我原以为它既不会或。
确保正确保存所有内容的一种方法是首先将existingtemplate.Sections
和Add()
每个TemplateSection
对象加载到其中。这需要数据库往返。
将TemplateSection
个对象附加到上下文并设置其TemplateID
属性会更有效。