Невозможно удалить строку данных с использованием модели Entity Framework - PullRequest
0 голосов
/ 09 декабря 2018

Я пытаюсь удалить элемент в моем приложении.Вот как я пытаюсь сделать это в моем событии нажатия кнопки.Сначала я проверяю, существует ли элемент в базе данных, а затем приступаю к удалению.

Но когда я пытаюсь удалить, я получаю эту ошибку:

На объект сущности нельзя ссылаться несколькими экземплярами IEntityChangeTracker.

Мой код:

private void btnRemove_Click(object sender, EventArgs e)
{
    if (MessageBox.Show("Do you want to proceed with deleting?", "System Alert", MessageBoxButtons.YesNo) == DialogResult.Yes)
    {
        int jid = 0;
        int ProdLine = 0;
        int seritid = 0;

        if (dgvServices.SelectedRows.Count != 0)
        {
            DataGridViewRow row = this.dgvServices.SelectedRows[0];
            jid = Convert.ToInt32(row.Cells["JID"].Value.ToString());
            ProdLine = Convert.ToInt32(row.Cells["ProdLine"].Value.ToString());
            seritid = Convert.ToInt32(row.Cells["ServiceItem"].Value.ToString());
        }

        using (DataControllers.RIT_Allocation_Entities RAE = new DataControllers.RIT_Allocation_Entities())
        {
            jsmodel2 = RAE.Job_Service.Where(a => a.JID == jid && a.ProdLine == ProdLine && a.ServiceItem == seritid).OrderByDescending(x => x.ServiceItem) 
                                      .Take(1).FirstOrDefault();

            if (jsmodel2 == null)
            {
                // No service item exists for this
                // Nothing to delete
                MessageBox.Show("The item doesn't exist ","Alert");
                return;
            }
            else
            {
                // Delete
                using (DataControllers.RIT_Allocation_Entities RAEE = new DataControllers.RIT_Allocation_Entities())
                {
                    var entry = RAEE.Entry(jsmodel2);

                    if (entry.State == EntityState.Detached)
                    {
                        RAEE.Job_Service.Attach(jsmodel2);
                        RAEE.Job_Service.Remove(jsmodel2);
                        RAEE.SaveChanges();
                        populateServiceDetailsGrid();
                    }
                }
            }
        }                
    }          
}

Как мне это преодолеть?

1 Ответ

0 голосов
/ 09 декабря 2018

Ваша сущность уже отслежена RAE (таким образом, ошибка), поэтому вам не нужен второй DbContest.Просто замените:

// Delete
using (DataControllers.RIT_Allocation_Entities RAEE = new DataControllers.RIT_Allocation_Entities())
{
  var entry = RAEE.Entry(jsmodel2);

  if (entry.State == EntityState.Detached)
  {
    RAEE.Job_Service.Attach(jsmodel2);
    RAEE.Job_Service.Remove(jsmodel2);
    RAEE.SaveChanges();
    populateServiceDetailsGrid();
  }
}

на

 RAE.Job_Service.Remove(jsmodel2);
 RAE.SaveChanges();
 populateServiceDetailsGrid();
...