實體框架7級聯插入

entity-framework-core

我們剛剛從EF6合併到EF7,因為我們在我們的應用程序中使用ASP.Net 5。該項目剛剛啟動,因此我們不會遇到依賴於beta庫發布代碼的問題。

我們遇到了級聯插入的問題。通過級聯插入,我的意思是使用父級插入/更新子實體的集合。它似乎以令人驚訝的方式依賴於操作的順序。

鑑於以下定義:

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。

熱門答案

我們正在積極努力使這種行為符合預期。有關我們的最新想法,請參閱2015年8月27日的設計會議說明



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow