我有一个包含多个表的postgres数据库。该项目使用实体框架实施。修改对象而不影响实体框架中的基本数据库表?
我有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]
对于一些特殊的要求, 我检索表的数据转换成对象A,使用API如下:
A AObj = commonDbService.ARepository.GetAById(A.Id);
GetAById是使用dbse T作为如下:
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页面只显示剩下的两个孙子。但是,如果我重新启动我的应用程序,所有的孙辈都存在于数据库中。
因此,我无法单独修改它,而无需修改基础数据库表。 任何人都可以帮助我做到这一点?
可能的重复[如何分离实体框架代码中的对象优先?](http://stackoverflow.com/questions/5599147/how-do-i-detach-objects-in-entity-framework-code-第一个) – Gusman
@Gusman:我试着按照两种方式来分离父母对象,就像你在上面分享的链接一样。但是,只要我分离或AsNoTracking,所有的子对象都被完全删除。只有父母及其领域完好无缺,儿童数量趋于零。我希望所有数据在对象中保持完整,并进一步更改此对象以不影响数据库。看起来我更接近解决方案,但无法让它工作。你可以让我知道更多关于如何做到这一点?谢谢。 – vinmm
您是否在查询中包含子元素?如果默认情况下不包含它们,EF将执行延迟加载,并且当对象被分离时,不可能使用它。我想如果你明确地说明包括他们将被保留的子元素。否则,尝试首先分离子元素,然后分离根对象。 – Gusman