【发布时间】:2015-08-20 21:04:32
【问题描述】:
我正在使用实体框架、WPF、C# 和本地 sql-server 数据库(两个表:Patient 和 MedicalSheet)开发应用程序。在更新记录时,我有一个异常说:
EntityFramework.dll 中出现“System.Data.Entity.Infrastructure.DbUpdateConcurrencyException”类型的第一次机会异常
附加信息:存储更新、插入或删除语句影响了意外数量的行 (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中的数据加载到多个文本框中,更新按钮的事件处理程序如下所示:
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);
}
}
【问题讨论】:
-
我怀疑问题可能是您在尝试保存患者时没有正确的患者 ID。能否在 UpdatePatient 方法中使用断点检查患者 ID?
-
感谢您花时间回答,我刚刚检查了 Id = 0;
-
Gert Arnold :我确实展示了 UpdatePatient 方法代码,Edit Patient 中的上下文只是测试一个 LINQ 查询,但我现在从问题中删除了它
标签: c# sql-server wpf entity-framework datagrid