gpt4 book ai didi

c# - EF 代码首先更新实体及其子实体

转载 作者:太空宇宙 更新时间:2023-11-03 23:45:26 28 4
gpt4 key购买 nike

我得到的更新方法只更新没有子实体的实体

    public void Update(T obj)
{
Ensure.IsNull(obj);

using (var DB = AccessManager.db)
{
DB.Set<T>().Attach(obj);
DB.Entry(obj).State = System.Data.EntityState.Modified;
DB.SaveChanges();
}
}

我尝试更新

LessonModel.Title = "Updated";
LessonModel.Files.Add(new LessonFileModel { IdxNumber = LessonModel.IdxNumber, FileName = "asd", FilePath = " asdf" });
DALFacade.Lesson.Update(LessonModel);

只有标题会更新。文件未更新。

所以如果方法是这样的:

    public void Update(LessonModel obj)
{
Ensure.IsNull(obj);

using (var DB = AccessManager.db)
{
DB.Lessons.Attach(obj);
DB.Entry(obj).State = System.Data.EntityState.Modified;
DB.SaveChanges();
}
}

我怎样才能拯救 child ?

最佳答案

这是使用 "Generic Repository" anti pattern 时出现的问题之一。 .编写适用于您传入的实体图的每种组合并始终完全按照您的要求执行的更新方法是 EF 中的一大难题

相反,请尝试编写与您的用例相匹配的存储库。

如果您在将文件附加到上下文后将文件添加到类(class)中,则可以解决您当前的问题。将条目标记为已修改会将此条目上的所有属性标记为已修改,它不会影响关系。

关于c# - EF 代码首先更新实体及其子实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27708622/

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