我有一个模型类,如下所示
public class Employee()
{
public string Name {get; set;}
public string Age {get; set;}
..
..
}
如果我正在更新员工的年龄,我将通过以下方式来执行linq
DbContext db = new DbContext();
Employee employee = dc.Emplyees.where(x=>x.id==id).FirstorDefault();
employee.Age ="22";
db.SaveChanges();
我的问题是更新年龄我需要获取所有列是否有任何方式我只能获取ID和年龄并更新年龄;
谢谢
答案 0 :(得分:1)
首先,您只选择年龄
var employee = db.Employees.Where(x => x.Id == id).Select(x => new Employee{ Id = x.Id, Age = x.Age}).FirstOrDefault();
通过执行此操作,您只需从数据库中检索年龄和ID。
对于更新,您可以这样做
var employee = new Employee{Id = id, Name = "My new Name", Age = 25};
db.Employees.Attach(employee);
db.Entry(employee).Property(x => x.Name).IsModified = true;
db.Entry(employee).Property(x => x.Age).IsModified = true;
db.SaveChanges();
答案 1 :(得分:1)
没有开箱即用,没有。实体框架的工作方式是跟踪完整对象。您需要完整对象才能对该对象进行更改并进行更新。否则,实体框架将只删除所有其他属性,因为它将解释您打算通过不为它们发送任何内容来清除这些值。
但是,您可以直接使用数据库,并发出UPDATE或调用是手动执行更新的存储过程。如果您愿意,可以在上下文中执行此操作,然后仅从控制器调用该方法,因此所有数据库内容仍然在同一位置。在上下文中,Database
实例属性具有直接执行SQL所需的一切。