C# EF核心-如何清除对象';s id及其导航属性

C# EF核心-如何清除对象';s id及其导航属性,c#,asp.net-core,entity-framework-core,C#,Asp.net Core,Entity Framework Core,假设我有一个对象,我想清除它的id和所有导航属性。可以通过分离吗?如果是,那么我如何在EF core中执行此操作 class Car { int Id {get;set;} int CarTypeId {get;set;} [ForeignKey(nameof(CarTypeId))] CarType CarType{get;set;} ... } 我最近做过类似的事情。正常的DbContext没有分离的方法,所以我添加了一个 publi

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

class Car
{
     int Id {get;set;}

     int CarTypeId {get;set;}

     [ForeignKey(nameof(CarTypeId))]
     CarType CarType{get;set;}

     ...
}

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

public void Detach<T>(T entity)
    where T : class
{
    Entry( entity ).State = EntityState.Detached;
}
更新:在分离时重置关键点。如果键可以是不同类型的,也需要处理。此处仅显示
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;
        }
    }
}
public void分离(T实体)
T:在哪里上课
{
条目(实体).State=EntityState.Distached;
foreach(条目(实体).Properties中的var属性){
if(prop.Metadata.IsKey()){
prop.CurrentValue=0;
}
}
}

我想知道detach是否可以自动清除所有ID。因为我需要自动清除对象中的所有ID。@Ellbar添加了重置键的分离版本。我没有测试它,但它应该可以工作。以同样的方式,你可以重置你的参考等。
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;
        }
    }
}