EF Core - 如何清除对象的id及其导航属性

时间:2017-03-02 07:51:54

标签: c# asp.net-core entity-framework-core

让我们假设我有一个对象,我想清除它的id和所有导航属性。分离是可能的吗?如果是,那么我该如何在EF核心中执行此操作?

{
   details : {
       name : "Vyshakh",
       martial_status : "Single"
   }
}

1 个答案:

答案 0 :(得分:1)

我最近做了类似的事情。普通的DbContext没有分离方法,所以我添加了一个。

public void Detach<T>(T entity)
    where T : class
{
    Entry( entity ).State = EntityState.Detached;
}

接下来我做了一个分离和重置实体的方法。我专门针对一个实体,但概念是这样的。

public void DetachAndResetKeys(Car entity)
{
    // Load references if needed

    // Detach
    _dbContext.Detach( entity );
    // Reset Key. 0 equals not set for int key
    entity.Id = 0;

    entity.CarType = null;
}

更新:在分离时重置键。如果键可以是不同类型,也需要处理它。这里只有int

public void Detach<T>(T entity)
    where T : class
{
    Entry( entity ).State = EntityState.Detached;
    foreach(var prop in Entry( entity ).Properties) {
        if (prop.Metadata.IsKey()) {
            prop.CurrentValue = 0;
        }
    }
}