【问题标题】:An entity object cannot be referenced by multiple instances of IEntityChangeTracker using code-first and EntityFramework 6 ,WFA使用代码优先和 EntityFramework 6,WFA 的多个 IEntityChangeTracker 实例无法引用实体对象
【发布时间】:2020-05-26 07:33:40
【问题描述】:

当我尝试更改数据库中的数据时,会引发异常。我是 Entity 的新手,不知道如何解决它。我使用 MS SQL Server。使用代码优先和 EntityFramework 6 ,WFA。

方法

private void editCircularToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Circular c = DG_C.CurrentRow.DataBoundItem as Circular;
            MyContext context = new MyContext();
            Red_Circular red = context.Reds.SingleOrDefault(r => r.Circular__ID == c.ID_Circular);
            AddCircular add = new AddCircular();
            add.tbsur.Text = c.Surname;
            add.tbname.Text = c.Name;
            add.cbeye.Text = c.EyeColor;                           // adding values to the textboxes on anoter forms
            add.cbhair.Text = c.HairColor;                         // добавление значение в тексбоксы другой формы

            if (red != null)// if found если найдено
            {
                add.tbchange.Text = red.charge;
                DialogResult result = add.ShowDialog(this);
                if (result == DialogResult.Cancel)
                {
                    c.Surname = add.tbsur.Text;
                    c.Name = add.tbname.Text;

                    c.EyeColor = add.cbeye.Text;
                    c.HairColor = add.cbhair.Text; // adding new values добавления новых значений
                    c.Activity = true;
                    red.charge = add.tbchange.Text;
                    red.info = add.tbinfo.Text;
                    context.Entry(c).State = EntityState.Modified; // error ошибка
                    //An entity object cannot be referenced by multiple instances of IEntityChangeTracker
                    context.Entry(red).State = EntityState.Modified;// if you delete 
                    //the line abode then this line works

                    context.SaveChanges();

                }
}

类上下文

public class MyContext : DbContext
    {
        public MyContext() : base("DefaultConnection")
        {

        }
        public DbSet<Department> Departments { get; set; }
        public DbSet<User> Users { get; set; }
        public DbSet<Resualt_of_search> Resualts { get; set; }
        public DbSet<Employee> Employees { get; set; }
        public DbSet<Circular> Circulars { get; set; }
        public DbSet<Red_Circular> Reds { get; set; }
        public DbSet<Blue_Circular> Blues { get; set; }
        public DbSet<Black_Circular> Blacks { get; set; }
        public DbSet<Yellow_circular> Yellows { get; set; }
        public DbSet<Green_Circular> Greens { get; set; }
    }

【问题讨论】:

    标签: c# visual-studio entity-framework-6 ef-code-first .net-4.8


    【解决方案1】:

    您似乎从某种数据网格中获得了您的Circular c = DG_C.CurrentRow.DataBoundItem as Circular;,该数据网格使用不同的上下文填充,而不是您使用的那个Red_Circular red = context.Reds.SingleOrDefault(r =&gt; r.Circular__ID == c.ID_Circular);

    尝试在您的班级中使用一个全局上下文,然后使用它来填充您的网格并获取您的Red_Circular

    这个问题解决了

    【讨论】:

    • 哦,这是一个工具条菜单??...不管怎样,解决方案还是一样的
    • 谢谢。你节省了我小组一半的课程作业。他们都犯了同样的错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-03
    • 1970-01-01
    • 2016-07-08
    • 1970-01-01
    相关资源
    最近更新 更多