2

当我想更新实体时,我试图将具有相关实体的实体附加到新上下文中。

我有一个具有 LanguageID 字段的人员表(广义为人员)。该字段作为 FK 通过 EF 链接到另一个表 Language,LanguageID 作为主键 (1-M)。我需要更新特定的 Persons 语言首选项,但是,该关系似乎仍然与旧上下文相关联,因为我在下面标记的行上收到“对象不能被多个 IEntityChangeTracker 实例引用”错误。有没有办法将语言实体作为人员(人)实体的关系附加到新的上下文中???

实体未在原始 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(); 
        }
    }

谢谢肖恩

4

1 回答 1

1

为避免此类问题,您应该进行GetPersonnel()查询NoTracking

IE

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

通过这种方式,您可以获得.Include()未附加的连接实体图(假设您使用 )。请注意,如果您尝试手动分离实体,这将不起作用,因为这样做会破坏您的图表。

希望这可以帮助

亚历克斯

于 2009-07-24T14:20:09.987 回答