簡體   English   中英

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

[英]EF Core - how to clear object's id and its navigation properties

假設我有一個對象,並且想清除其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;
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM