实体保存正常,但无论我做什么都不会更新记录

时间:2018-01-03 20:40:26

标签: c# entity-framework

上下文不保存到数据库,无论我做什么,它都会插入新记录,但不能保存。这是使用sql server而用户有权限更新数据已经检查了这个

private void btnOk_Click(object sender, EventArgs e)
{

      SourceContext SourceDal = new SourceContext();

    Appointment _appointment = new Appointment();
    int errorCount = 0;

    Patient _patient = new Patient();
    _patient = SourceDal.getPatientByPatientId(txtPatientId.Text);
    _patient.SSN = txtSSN.Text;

    _patient.FirstName = txtPatientFirstName.Text;
    _patient.LastName = txtPatientLastName.Text;
    _patient.Middle = txtPatientMiddle.Text;
    _patient.AddressOne = txtPatientAddressOne.Text;
    _patient.City = txtPatientCity.Text;
    _patient.State = txtPatientState.Text;
    _patient.ZipCode = txtPatientZip.Text;


    _patient.HomePhone = txtPatientHomePhone.Text;
    _patient.WorkPhone = txtPatientWorkPhone.Text;
    _patient.CellPhone = txtPatientCellPhone.Text;

    if (rBtnHomePhone.Checked == true)
        _patient.ApptPhone = txtPatientHomePhone.Text;
    if (rBtnHomePhone.Checked == true)
        _patient.ApptPhone = txtPatientHomePhone.Text;
    if (rBtnWorkPhone.Checked == true)
        _patient.ApptPhone = txtPatientWorkPhone.Text;


    _patient.BirthDate = dtBirthDate.DateTime;
    _patient.emailAddress = txtPatientEmail.Text;
    _patient.Race = (int)dpRace.SelectedValue;
    _patient.Ethnicity = (int)dpEthnicity.SelectedValue;
    _patient.Language = (int)dpLanguages.SelectedValue;

    _patient.AlertNote = txtPatientNotes.Text;


    if (dpGender.Text == "")
    {
        dpGender.Focus();
        errorCount = 1;
        lblGenderRequired.Text = "* Gender is required.";

    }
    else
    {
        errorCount = 0;
        lblGenderRequired.Visible = false;
    }
    _patient.Gender = dpGender.Text.Substring(0, 1);




    _patient.PatientID = txtPatientId.Text;
    txtPatientFirstName.Text = _patient.FirstName;
    txtPatientLastName.Text = _patient.LastName;
    // IF ITS SAVE NEW GO AHEAD ADD IT TO THE CONTEXT.                
        SourceDal.AddToPatient(_patient);
}

添加到paitent有以下

public void AddToPatient(Patient newPatient)
    {
        using (var myContext = new SMBASchedulerEntities(this.Connectionstring))
        {
            myContext.Patients.Add(newPatient);

            if (newPatient.ID == 0)
            {
                myContext.Entry(newPatient).State = EntityState.Added;
            }
            else
            {
                myContext.Entry(newPatient).State = EntityState.Modified;
            }
            try
            {
                myContext.SaveChanges();
            }

            catch (DbEntityValidationException ex)
            {
                foreach (var entityValidationErrors in ex.EntityValidationErrors)
                {
                    foreach (var validationError in entityValidationErrors.ValidationErrors)
                    {
                        Console.Write("Property: " + validationError.PropertyName + " Error: " + validationError.ErrorMessage);
                    }
                }

            }
        }
    }

它在记录中添加了罚款,但即使所有细节都正确,它也不会保存当前记录,无论我做什么。但是当我重新加载表单和应用程序时,更新不存在,电子邮件地址没有保存,没有任何其他更新。

1 个答案:

答案 0 :(得分:-1)

我怀疑我并不熟悉该实体框架,因为我不熟悉某些语法,但您应该可以使用以下内容:

public void AddToPatient(Patient newPatient)
    {
        SMBASchedulerEntities dbContext = new SMBASchedulerEntities();

        if (newPatient.ID.ToString() != "0")
        {//Update the record
            Patient updatePatient = dbContext.Patients.Single(p => p.ID == newPatient.ID);
            updatePatient.FirstName = newPatient.FirstName;
            updatePatient.LastName = newPatient.LastName;
            ...
            ...
            dbContext.SubmitChanges();
        }
        else
        {//Insert a new record
            Patient insertPatient = new Patient();
            insertPatient.FirstName = newPatient.FirstName;
            insertPatient.LastName = newPatient.LastName;
            ...
            ...
            dbContext.Patients.InsertOnSubmit(insertPatient);
            dbContext.SubmitChanges();
        }
    }

换句话说,在每次插入之前,检查是否需要先插入或更新新患者。谢谢你的投票。