Я работаю над приложением с использованием 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);
}
}
Я подозреваю, что проблема может быть, что вы не имеете правильный идентификатор для пациента при попытке сохранить его. Можете ли вы использовать контрольную точку для проверки идентификатора пациента в методе UpdatePatient? –
Спасибо за то, что я отвечу, я просто проверил Id = 0; – Thipharete19
Gert Arnold: Я показал код метода UpdatePatient, контекст в Edit Patient просто тестировал запрос LINQ, но я удалил его сейчас из вопроса – Thipharete19