我有以下代码:
类
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);
有没有办法在不必触摸数据库,设置主键或弄乱类文件的情况下进行此更新?
答案 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; }
}
以上各项的变化,都将解决问题。