2015-08-20 7 views
0

Я работаю над приложением с использованием Entity Framework, WPF, C# с локальной базой данных sql-сервера (две таблицы: Patient and MedicalSheet). при обновлении записи у меня есть исключение, которое говорит:Обновление записи с Entity Framework, генерирующей исключение

Первый шанс исключение типа «System.Data.Entity.Infrastructure.DbUpdateConcurrencyException» произошло в EntityFramework.dll

Дополнительная информация: Хранить обновления, вставки, или delete указывает на неожиданное количество строк (0). Объекты могут быть изменены или удалены, поскольку объекты загружены. См. http://go.microsoft.com/fwlink/?LinkId=472540 для получения информации о понимании и обработке оптимистичных исключений параллелизма.

Мой DAL код выглядит следующим образом:

public static void UpdatePatient(Patient patient) 
    { 

     using (context ctx = new context()) 
     { 
      ctx.Entry(patient).State = EntityState.Modified; 
      ctx.SaveChanges(); 
     } 
    } 

У меня есть кнопка обновления для каждой строки в DataGrid, после нажатия на нее, она создании экземпляра новое окно, которое загружает данные из DataGrid в несколько Textboxes, событие обработчик кнопки обновления выглядит следующим образом:

private void EditInDatagrid_btn(object sender, RoutedEventArgs e) 
    { 
     new ModernDialog 
     {     
      Title = "Update patient DataGrid", 
      Content = new EditPatient((Patient)patientGrid.SelectedItem){ 
      Width = 600, 
      Height = 400 
      }, 
     }.ShowDialog(); 
    } 

UserControl в новом окне обновления (что всплывает после нажатия на кнопку обновления) код выглядит следующим образом:

public partial class EditPatient : UserControl 
{ 
    Patient patient = new Patient(); 

    public EditPatient(Patient patient) 
    { 
     InitializeComponent(); 

     fNameBoxEditing.Text = patient.firstName; 
     lNomBoxEditing.Text = patient.lastName; 
      ..... 

    } 


    private void ValiderEditing_btn(object sender, RoutedEventArgs e) 
    { 

     patient.firstName = PrenomBoxEditing.Text; 
     patient.lastName = NomBoxEditing.Text; 


     PatientDAL.UpdatePatient(patient); 

     MessageBoxButton btn = MessageBoxButton.OK; 
     ModernDialog.ShowMessage("Patient infos modified succeeded!", "", btn); 

    } 

} 
+0

Я подозреваю, что проблема может быть, что вы не имеете правильный идентификатор для пациента при попытке сохранить его. Можете ли вы использовать контрольную точку для проверки идентификатора пациента в методе UpdatePatient? –

+0

Спасибо за то, что я отвечу, я просто проверил Id = 0; – Thipharete19

+0

Gert Arnold: Я показал код метода UpdatePatient, контекст в Edit Patient просто тестировал запрос LINQ, но я удалил его сейчас из вопроса – Thipharete19

ответ

0

добавить this.patient = пациент в EditPatient конструктор

+0

Bro Just Спасибо, я изо всех сил пытался найти решение, он отлично работает, Большое спасибо. – Thipharete19

Смежные вопросы