2015-09-10 3 views
4

Мы только что объединили EF7 с EF6, так как мы используем ASP.Net 5 в нашем приложении. Проект только начался, поэтому мы не столкнемся с проблемами с выпуском кода, зависящим от бета-библиотек.Entity Framework 7 каскадных вставок

У нас возникла проблема с каскадными вставками. Каскадные вставки я подразумеваю, что набор дочерних сущностей вставлен/обновлен родителем. Кажется, это удивительно отличается от порядка операций.

Учитывая следующие определения:

public class ParentEntity 
{ 
    public int Id { get; set; } 
    public ICollection<ChildEntity> Children { get; set; } 
} 

public class ChildEntity 
{ 
    public int Id { get;set; } 

    public ParentEntity Parent { get; set; } 
} 

следующий код работает (ChildTable заполняется 3 значений):

var parent = new ParentEntity();    

parentSet.Add(parent); 

parent.Children = new List<ChildEntity>(); 

for (int i = 0; i < 3; i++) 
{ 
    var child= new ChildEntity { Parent = parent }; 
    parent.Children.Add(child); 
} 

_uow.SaveChanges(); 

Но следующий не (ChildTable остается пустым):

var parent = new ParentEntity();     

// Moved parentSet.Add() 

parent.Children = new List<ChildEntity>(); 

for (int i = 0; i < 3; i++) 
{ 
    var child= new ChildEntity { Parent = parent }; 
    parent.Children.Add(child); 
} 

parentSet.Add(parent); 

_uow.SaveChanges(); 

Чтобы сделать работу ниже, я должен сделать следующее:

var parent = new ParentEntity();     

parent.Children = new List<ChildEntity>(); 

for (int i = 0; i < 3; i++) 
{ 
    var child= new ChildEntity { Parent = parent }; 
    parent.Children.Add(child); 
    childSet.Add(child); // Added childSet.Add() 
} 

parentSet.Add(parent); 

_uow.SaveChanges(); 

Может кто-нибудь объяснить, почему существует такая разница? В EF6 это работает так, как я ожидаю. Я бы понял, если в EF7 еще нет поддержки для автоматически отслеживаемых дочерних объектов, но, очевидно, вы можете заставить ее работать, если вы перемещаете вызов Set.Add. Еще более удивительно, что перемещение вызова Set.Add до того, как заполняется дочерняя коллекция, - это то, что работает.

Любые идеи/объяснения?

Мы используем EF7 Beta 7.

ответ

0

Мы активно работаем, чтобы сделать это так, как ожидалось. Для наших последних мыслей, пожалуйста, см. Наш August 27, 2015 Design Meeting Notes.

+0

Это все еще поведение? –

+0

См. [Сохранение связанных данных] (https://docs.microsoft.com/en-us/ef/core/saving/related-data) в документации по EF Core. – bricelam

Смежные вопросы