使用实体框架更新记录生成异常

时间:2015-08-20 21:04:32

标签: c# sql-server wpf entity-framework datagrid

我正在使用Entity Framework,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中的数据加载到多个textBox中,更新按钮的事件处理程序如下所示:

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);

    }

}

1 个答案:

答案 0 :(得分:0)

将this.patient = patient添加到EditPatient构造函数