模型上的集合未更新到数据库

时间:2014-06-17 18:26:52

标签: c# asp.net-mvc entity-framework asp.net-mvc-4 ef-code-first

我有一个模型集合:

[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();之前,这些部分将保存到数据库中,但如果我再次加载模板则不会重新加载。

显然我在宣布一对多的关系时遗漏了一些东西,但是读过几十篇文章后我看不出它会是什么。

1 个答案:

答案 0 :(得分:1)

构造CurrentValues.SetValues仅设置标量属性,换句话说,非导航属性。

我有点惊讶existingtemplate.Sections = template.Sections;显然保存了TemplateSection个对象,但没有建立关联。我原以为它既不会

确保正确保存所有内容的一种方法是首先将existingtemplate.SectionsAdd()每个TemplateSection对象加载到其中。这需要数据库往返。

TemplateSection个对象附加到上下文并设置其TemplateID属性会更有效。