На объект сущности нельзя ссылаться из нескольких экземпляров IEntityChangeTracker с использованием кода сначала и EntityFramework 6, WFA - PullRequest
0 голосов
/ 26 мая 2020

Когда я пытаюсь изменить данные в базе данных, выдается исключение. Я новичок в 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; }
    }

1 Ответ

0 голосов
/ 26 мая 2020

кажется, что вы получаете свой Circular c = DG_C.CurrentRow.DataBoundItem as Circular; из какой-то сетки данных, которая заполнена с использованием другого контекста, чем тот, который вы используете, чтобы получить это Red_Circular red = context.Reds.SingleOrDefault(r => r.Circular__ID == c.ID_Circular);

попробуйте использовать один глобальный контекст в своем классе а затем используйте это, чтобы заполнить свою сетку и получить Red_Circular

, который может решить эту проблему

...