实体框架:子表中的记录未插入

时间:2016-06-18 21:33:12

标签: c# sql-server entity-framework ef-code-first

父表中的记录已成功保存但子表记录未保存且未发生错误,使用具有可用存储库模式的实体框架here

下面是我的表格的示例架构设计,可能是一个特例。

enter image description here

如果我尝试在Table2和Table3中插入记录,请考虑上面的表格,没有记录插入到表3中。

如果需要进一步澄清这个问题,请告诉我。

提前致谢!!

编辑1

以下是我用来插入父记录和子记录的代码。

    var parent = new Table2()
    {
        Table1Id = 1,
        SecondColumn = 1
    };

    parent.Tables3.Add(new Table3()
    {
        Table1Id = 1,
        SecondColumn = 1,
        AnotherColumn = 1
    });

    context.Set<Table2>().Attach(parent);
    context.Entry<Table2>(parent).State = EntityState.Added;
    context.SaveChanges();

编辑2

public partial class Table2
{
    public Table2()
    {
        this.Tables3 = new HashSet<Table3>();
    }

    public int Table1Id { get; set; }
    public int SecondColumn { get; set; }

    public virtual ICollection<Table3> Tables3 { get; set; }
}

public partial class Table3
{
    public int Table1Id { get; set; }
    public int SecondColumn { get; set; }
    public int AnotherColumn { get; set; }
}

1 个答案:

答案 0 :(得分:1)

你应该做两件事之一:

  1. 使用add而不是attach

    var parent = new Table2()
    {
        Table1Id = 1,
        SecondColumn = 1
    };
    
    parent.Tables3.Add(new Table3()
    {
        Table1Id = 1,
        SecondColumn = 1,
        AnotherColumn = 1
    });
    
    context.Set<Table2>().Add(parent);
    context.SaveChanges();
    
  2. 在这种情况下,还将添加所有导航属性。

    1. 在附加后用状态绘制整个图形(现在只将状态设置为父表)。