Обновите одну запись, используя структуру кадров - PullRequest
0 голосов
/ 22 января 2020

Я хочу обновить одну запись в базе данных, используя структуру сущностей. при обновлении этой записи все даты для этого сотрудника устанавливаются только для кода сотрудника и IsActive .. как обновление isAcive только

это мой код

       private void btn_Save_Resignation_Click(object sender, EventArgs e)
       {
          try
           {
                   var IsActive = new database.tblEmployeeData
                   {

                       EmployeeCode = Convert.ToInt32(txtEmpCode.Text),
                       IsActive = cbxResignationEmp.Checked = true, 
                   };


                       db.tblEmployeeDatas.AddOrUpdate(IsActive);
                       db.SaveChanges();
                       MessageBox.Show("تم إقالة الموظف بنجاح", "Sigma Software", MessageBoxButtons.OK, MessageBoxIcon.Information);
                       ClearResignation();

           }
           catch (Exception ex)
           {
               MessageBox.Show(ex.Message, "Sigma Software", MessageBoxButtons.OK, MessageBoxIcon.Information);
           }
}

......... ........ Это моя модель класса

   public partial class tblEmployeeData
   {
       [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
       public tblEmployeeData()
       {
           this.tblBlackListForEmps = new HashSet<tblBlackListForEmp>();
           this.tblContractForEmploees = new HashSet<tblContractForEmploee>();
           this.tblCustodyForEmps = new HashSet<tblCustodyForEmp>();
           this.tblDocumentEmployeeWithStates = new HashSet<tblDocumentEmployeeWithState>();
           this.tblOtherDataForEmps = new HashSet<tblOtherDataForEmp>();
           this.tblPenaltyForEmployees = new HashSet<tblPenaltyForEmployee>();
       }

       public int EmployeeCode { get; set; }
       public string EmployeeName { get; set; }
       public Nullable<byte> GenderCode { get; set; }
       public Nullable<byte> PranchCode { get; set; }
       public Nullable<byte> RelationShipCode { get; set; }
       public Nullable<byte> AdministrationCode { get; set; }
       public Nullable<byte> DepartmentCode { get; set; }
       public Nullable<short> JopCode { get; set; }
       public Nullable<byte> JopLevelCode { get; set; }
       public Nullable<byte> ConCustmerCode { get; set; }
       public Nullable<byte> NationalityCode { get; set; }
       public Nullable<byte> TypeOfWorkersCode { get; set; }
       public Nullable<bool> IsActive { get; set; }

1 Ответ

0 голосов
/ 22 января 2020

Как объяснено здесь :

Entity Framework не может волшебным образом выяснить, какие свойства изменились, а какие свойства не изменились, она берет сущность, и если она существует , вводит объект в базу данных в том виде, в каком он в настоящее время заполнен. Если объект не существует, он вставляет его в базу данных.

Поэтому я бы порекомендовал вам изменить код следующим образом:

var empCode = Convert.ToInt32(txtEmpCode.Text);
var IsActive = db.tblEmployeeDatas.FirstOrDefault(e => e.EmployeeCode == empCode);
if (IsActive == null)
{
   IsActive = new database.tblEmployeeData
   {
      EmployeeCode = empCode,
   };
}
IsActive.IsActive = cbxResignationEmp.Checked = true, // BTW should it be assigning or condition?

db.tblEmployeeDatas.AddOrUpdate(IsActive);
db.SaveChanges();
...
...