EF6 + / 7是否添加了我可以添加更新子表的方法?

时间:2014-09-27 08:05:44

标签: sql-server entity-framework entity-framework-6 entity-framework-core

我有两张桌子:

    public AdminTest()
    {
        this.AdminTestQuestions = new List<AdminTestQuestion>();
    }
    public int AdminTestId { get; set; }
    public string Title { get; set; }     
    public virtual ICollection<AdminTestQuestion> AdminTestQuestions { get; set; }
}

public partial class AdminTestQuestion
{
    public int AdminTestQuestionId { get; set; }
    public int AdminTestId { get; set; }
    public System.Guid QuestionUId { get; set; }
    public virtual AdminTest AdminTest { get; set; }
}

我正在使用以下EF6代码将新的adminTest(及其adminTestQuestions)添加到 数据库:

    public async Task<IHttpActionResult> Post([FromBody]AdminTest adminTest)
    {
        db.AdminTests.Add(adminTest);
        foreach (AdminTestQuestion adminTestQuestion in adminTest.AdminTestQuestions) 
        {
            db.AdminTestQuestions.Add(adminTestQuestion);
        }
        await db.SaveChangesAsync(User, DateTime.UtcNow);
        return Ok(adminTest);
    }

我有类似但更复杂的代码来处理从adminTest添加或删除问题的情况。我的所有代码都可以工作,但如果EF能够做我需要的工作而不是必须添加许多代码行,那将是非常好的。

任何人都可以告诉我EF6是否有任何更改,或者是否计划对EF7进行任何更改

1 个答案:

答案 0 :(得分:-1)

已经在ef7 github上注意到它们已经添加了一些添加主键实体的简洁代码。

但目前尚不清楚它是否会成为实体中儿童收集的常见问题。 Git hub Entity Framework Design Meeting Notes

但对于EF6,您可以使用Generic Repository为您完成所有工作。 (因为你不能直接扩展DbContext)

假设db是DbContext

你可以使用这个 - &gt; :Accessing a Collection Through Reflection

然后从包含ICollection&lt;&gt;的类T中查找所有属性并在ICollection属性的项目上做一个foreach然后在它上面做db.Set.Add(proprietyChild)

这将消除总是重复相同的添加子实体代码的需要。

有些人已经实施了解决方案:Automated updates of a graph of deached entities