我有一个包含多个表格的postgres数据库。该项目使用Entity Framework实现。
我有3个数据库类可以说A,B& C. A类包含B对象的列表。 B类包含C对象的列表。 C类是一个包含一些字段的简单类。
这些类的开头看起来像这样:
[Table("A")]
public class A: GUIDModelBase
{....
}
数据填写如下:
Parent1 [A]
-Child1 [B]
--Grandchild1 [C]
--Grandchild2 [C]
-Child2 [B]
--Grandchild3 [C]
--Grandchild4 [C]
对于某些特定要求, 我使用API将表的数据检索到对象A中,如下所示:
A AObj = commonDbService.ARepository.GetAById(A.Id);
GetAById使用dbset实现,如下所示:
protected DbSet<TEntity> dbset = null;
public Project GetAById(Guid id)
{
return dbset.Include(x => x.CoordinateSystem)
.SingleOrDefault(p => p.Id == id);
}
我想操纵(不想拥有Grandchild2和Grandchild4)并将AObj的数据存储在另一个类对象中,如下所示:
MigrationData md = new MigrationData();
md.ANewObj = Manipulate(AObj); //Removes two grandchildren elements
当我这样做时,即使是AObj也会被完全修改。我需要完整的数据在AObj和数据库表中完整(但暂时直到我的应用程序重新启动)。表数据显示在其中一个UI页面中。一旦按上述行修改,UI页面仅显示剩余的2个孙子。但是,如果我重新启动我的应用程序,所有孙子孙女都存在于数据库中。
因此,我无法在不修改基础数据库表的情况下单独修改它。 任何人都可以帮我完成这件事吗?
答案 0 :(得分:1)
简短的回答是,这取决于对象的操作实际上做了什么。如果您在对象附加到上下文时修改对象,则是,Entity Framework将看到对象已修改,并且如果您调用SaveChanges将更新它。要么分离你想要分离的对象,这样你就可以自由地处理它们,或者不要改变它们并将它们映射/克隆到新对象。