我有更新方法,只更新没有子节点的实体
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();
}
}
我该如何拯救孩子?
答案 0 :(得分:3)
这是使用"Generic Repository" anti pattern时出现的问题之一。编写一个适用于您传入的实体图形的每个组合的Update方法,并且它将始终完全按照您的意愿执行,这是EF 中的一个很大的痛苦。
相反,请尝试编写与您的用例匹配的存储库。
如果您在中将文件添加到上下文后将文件添加到课程,则可以解决当前问题。将条目标记为已修改会将此条目上的所有属性标记为已修改,但不会影响关系。