gpt4 book ai didi

c# - 使用Entity Framework 4.0时如何更新不同表的相关条目?

转载 作者:太空宇宙 更新时间:2023-11-03 14:06:03 27 4
gpt4 key购买 nike

有没有更短的方法来进行此更新?

void Update(Table1 table1Entry, Table2[] table2entries)
{
entities.Table1.Attach(table1Entry);
var table2EntriesIds = table2entries.Select(a => a.Id);
var updates = entities.Table2
.Where(a => table2EntriesIds.Contains(a.Id));
foreach(var update in updates)
{
entities.Table2.Attach(update);
}

var deletions = entities.Table2
.Where(a => a.Table1Id == table1Entry.Id);
.Where(a => !table2EntriesIds.Contains(a.Id));
foreach(var deletion in deletions)
{
entities.DeleteObject(deletion);
}

var insertions = table2entries.Except(matches);
foreach(var insertion in insertions)
{
entities.AddToTable2(insertion);
}

entities.SaveChanges();
}

其中 Table2 有一个 Table1_Id 外键。

最佳答案

这个想法是正确的。您可以对其进行优化,例如您不会单独加载要更新的关系和要删除的关系,但您仍然必须手动将实体的当前分离状态与数据库中的状态同步。同步实体图状态的唯一方法是针对每个实体和关系手动执行。

问题是您的代码是否有效。我认为不是。它不会更新任何记录,因为它不会将记录的状态更改为已修改。您也不能再次附加从上下文加载的记录。最后一点,如果那些 table1 和 table2 以某种方式相关,我看不到任何代码处理关系本身(除非您使用 FK 属性)。

关于c# - 使用Entity Framework 4.0时如何更新不同表的相关条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9282185/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com