Добавлены ли в EF6+/7 какие-либо способы добавления обновленных дочерних таблиц?

У меня есть две таблицы:

    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, которые позволят это сделать?


person Samantha J T Star    schedule 27.09.2014    source источник
comment
пока нет статуса и по-прежнему предлагается   -  person Yuliam Chandra    schedule 30.09.2014


Ответы (1)


отметил на github ef7, что они, кажется, добавили некоторый аккуратный код, который добавляет сущность первичного ключа.

но до сих пор не ясно, будет ли это обычным делом для дочерних коллекций в сущности. Git hub Entity Framework Design Meeting Примечания

но для EF6 вы можете использовать универсальный репозиторий, чтобы сделать всю работу за вас. (поскольку вы не можете напрямую расширять DbContext)

предполагая, что db является DbContext

вы можете использовать это ->: Доступ к коллекции через отражение

затем найдите все свойства из класса T, которые содержат ICollection‹>, и выполните foreach для элемента свойства ICollection, затем выполните для него db.Set.Add(proprietChild)

это устранило бы необходимость всегда повторять один и тот же код добавления дочернего элемента к объекту.

некоторые люди уже реализовали решение: Автоматическое обновление графа отключенных объектов

person Rugdr    schedule 03.10.2014