簡體   English   中英

將具有相關實體的實體附加到新實體框架上下文

[英]attaching an entity with a related entity to a new entity framework context

當我想更新實體時,我試圖將與相關實體的實體附加到新上下文中。

我有一個人員表(通用到人員),其中有一個LanguageID字段。 該字段通過EF作為FK鏈接到另一個表Language(以LanguageID作為主鍵(1-M))。 我需要更新特定的“ Persons”語言首選項,但是,該關系似乎仍舊鏈接到舊上下文,因為在下面標記的行上出現“無法被IEntityChangeTracker的多個實例引用的對象”錯誤。 有沒有什么方法可以將Language實體作為Personnel(Person)實體的關系附加到新上下文中?

實體沒有在原始的GetPersonnel()方法中分離,該方法使用.Include()方法返回PreferredLanguage

PreferredLanguage是Person表上的NavigationProperty名稱。

 public static void UpdateUser(Personnel originalUser, Personnel newUser )
    {
        using (AdminModel TheModel = new AdminModel())
        {

            ((IEntityWithChangeTracker)originalUser).SetChangeTracker(null);
            ((IEntityWithChangeTracker)originalUser.PreferredLanguage).SetChangeTracker(null);

            TheModel.Attach(originalUser);--Error Line
            TheModel.ApplyPropertyChanges("Person", newUser);

            TheModel.SaveChanges(); 
        }
    }

謝謝肖恩

為了避免這類問題,您應該使GetPersonnel()執行NoTracking查詢。

ctx.Person.MergeOption = MergeOption.NoTracking;
// and then query as per normal.

這樣,您可以獲得未連接的連接實體的圖(假設您使用.Include() )。 請注意,如果您嘗試手動分離實體,則此方法將無效,因為這樣做會破壞圖形。

希望這可以幫助

亞歷克斯

暫無
暫無

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

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