Vag*_*gue 5 entity-framework entity-framework-core
我们能够保存对父对象的更改,但不会保留对子集合的更改。
我们使用了允许 EF Core 发现关系并正确构建数据库的命名约定。
我正在测试的示例在 db 中有一个带有单个子实体的父实体。我们已将第二个子实体添加到该父实体的 MyChildren 集合中。为什么 SaveChanges 不会将 MyChildren 集合的更新保存到数据库?
public class ParentType
{
public Guid ParentId { get; set; }
public string SomeString { get; set; }
public ObservableCollection<ChildType> MyChildren { get; set; } = new ObservableCollection<ChildType>();
}
public class ChildType
{
public Guid Child { get; set; }
public ParentType MyParent { get; set; }
}
// in the example parentIn is passed with 2 ChildType entities in MyChildren.
public static ParentType SaveMe(ParentType parentIn)
{
ParentType parentSaved = null;
using (DataContext db = new DataContext())
{
if (parentIn.ParentId == Guid.Empty)
{
parentSaved = new ParentType();
parentSaved.ParentId = Guid.NewGuid();
db.Parents.Add(parentSaved);
}
else
{
// in the example parentIn is found in the db with 1 child entity
parentSaved = db.Parents.Where(e => e.ParentId == parentIn.ParentId).Include(e => e.MyChildren).SingleOrDefault();
}
parentSaved.SomeString = parentIn.SomeString;
parentSaved.MyChildren = parentIn.MyChildren;
int result = db.SaveChanges();
return parentSaved;
}
}
Run Code Online (Sandbox Code Playgroud)
SomeString 已保存,但 MyChildren 未保存。没有错误。为什么子实体没有更新?
编辑 1作为一种解决方法,我在添加新的子集合之前从数据库中删除了子集合。
else
{
// in the example parentIn is found in the db with 1 child entity
parentSaved = db.Parents.Where(e => e.ParentId == parentIn.ParentId).Include(e => e.MyChildren).SingleOrDefault();
db.Parents.RemoveRange(parentSaved.MyChildren);
db.SaveChanges();
}
parentSaved.SomeString = parentIn.SomeString;
parentSaved.MyChildren = parentIn.MyChildren;
int result = db.SaveChanges();
return parentSaved;
Run Code Online (Sandbox Code Playgroud)
这有效但并不令人满意,因为保存父级不再是事务性的。有没有更好的办法?
| 归档时间: |
|
| 查看次数: |
674 次 |
| 最近记录: |