我有两张桌子:
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进行任何更改
答案 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