EF Core - 如何清除對象的id及其導航屬性

asp.net-core c# entity-framework-core

讓我們假設我有一個對象,我想清除它的id和所有導航屬性。分離是可能的嗎?如果是這樣,那麼我該如何在EF核心中執行此操作?

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;
}

接下來,我做了一個分離和重置實體的方法。我專門針對一個實體,但概念是這樣的。

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;
        }
    }
}


Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow