System.InvalidOperationException:属性“Emp_Status”是对象的密钥信息的一部分,无法修改

时间:2016-08-23 04:40:12

标签: entity-framework linq

我有以下代码:

public partial class Emp_Details
 {
   public long Emp_ID { get; set; }
   public string Emp_Title { get; set; }
   public string Emp_Name { get; set; }
   public string Emp_LastName { get; set; }
   public string Emp_Status{ get; set; }
 }

实体代码

      using (LoginEntities dbcontext = new LoginEntities())
          {                
            Emp_Details emp = dbcontext.Emp_Details.Single(i => i.Emp_ID == empid);
              emp.Emp_Status = status;
              dbcontext.SaveChanges();              
          }

我收到了异常

  System.InvalidOperationException: The property 'Emp_Status' is part of the object's key information and cannot be modified.

我搜索过一个解决方案,找到了两个可能的修复方法:

1)设置主键。如果表上没有主键,它只会选择不可为空的列作为连接主键,实体将是只读/。

2)使用直接更新,例如:

 dbcontext.Database.ExecuteSqlCommand(
 "UPDATE Emp_Details SET [Emp_Status] = {0} WHERE [Emp_ID] = {1}", status, empid);

有没有办法在不必触摸数据库,设置主键或弄乱类文件的情况下进行此更新?

1 个答案:

答案 0 :(得分:2)

您的实体没有主键。所以:

public partial class Emp_Details {
   public long Id { get; set; } // pay attention to this
   public string Emp_Title { get; set; }
   public string Emp_Name { get; set; }
   public string Emp_LastName { get; set; }
   public string Emp_Status{ get; set; }
}

或者

public partial class Emp_Details {
   public long Emp_DetailsId { get; set; } // pay attention to this
   public string Emp_Title { get; set; }
   public string Emp_Name { get; set; }
   public string Emp_LastName { get; set; }
   public string Emp_Status{ get; set; }
}

或者

public partial class Emp_Details {
   [Key] // pay attention to this
   public long Emp_ID { get; set; }
   public string Emp_Title { get; set; }
   public string Emp_Name { get; set; }
   public string Emp_LastName { get; set; }
   public string Emp_Status{ get; set; }
}

以上各项的变化,都将解决问题。