【问题标题】:'An entity object cannot be referenced by multiple instances of IEntityChangeTracker.' while deleting?'IEntityChangeTracker 的多个实例不能引用实体对象。'删除时?
【发布时间】:2021-12-07 15:16:09
【问题描述】:

我尝试为使用 C#、EF6 和 XAML 的 WPF 项目在我的数据库表上创建对象的删除方法。我在最后一个尝试了几种不同的变体。 VS 抛出的错误如下:

System.InvalidOperationException: '一个实体对象不能被多个 IEntityChangeTracker 实例引用。'

代码:

private void btnSupprimer_Click(object sender, RoutedEventArgs e)
{
    var empASupprimer = ListViewEmployes.SelectedItems[0] as Employe;
    
    if (empASupprimer == null)
    {
        return;
    }
    else
    {
        using (var x = new ScriptBDEntity())
        {
            x.Employes.Attach(empASupprimer);
            x.Employes.Remove(empASupprimer);
                   
            x.SaveChanges();

            loadlistview();
            MessageBox.Show("Vous avez supprimer l'employé:" + empASupprimer);
        }
    }
}

【问题讨论】:

    标签: c# xaml entity-framework-6 ado.net


    【解决方案1】:

    您是否尝试通过 Id 获得员工而不是使用 attach ? 喜欢

    var employe = x.Employes.Single(e => e.Id == empASupprimer.Id),
    X.Employes.Remove(employe);
    X.SaveChanges();
    

    【讨论】:

    • 我目前的解决方案是脱离主上下文并将其附加到“x”一个是有效的解决方案还是你认为我应该只使用我的主要的?
    • @JeremySimard 您可以通过在绑定查询集合上调用.AsNoTracking() 来简单地使用非跟踪实体来绑定您的列表。这样您就不需要分离它们。
    • @JeremySimard 使用 vendettamit 提出的解决方案。一般来说,当您不确定实体是否会更新时,阅读偏好使用 AsNoTracking()。它的性能更高。
    猜你喜欢
    • 1970-01-01
    • 2011-11-01
    • 2011-10-12
    • 1970-01-01
    相关资源
    最近更新 更多