在不影响实体框架中的基础数据库表的情况下修改对象?

时间:2017-05-04 16:19:48

标签: c# postgresql entity-framework dbset

我有一个包含多个表格的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个孙子。但是,如果我重新启动我的应用程序,所有孙子孙女都存在于数据库中。

因此,我无法在不修改基础数据库表的情况下单独修改它。 任何人都可以帮我完成这件事吗?

1 个答案:

答案 0 :(得分:1)

简短的回答是,这取决于对象的操作实际上做了什么。如果您在对象附加到上下文时修改对象,则是,Entity Framework将看到对象已修改,并且如果您调用SaveChanges将更新它。要么分离你想要分离的对象,这样你就可以自由地处理它们,或者不要改变它们并将它们映射/克隆到新对象。