Asp.net mvc EF select语句

Asp.net mvc EF select语句,asp.net-mvc,entity-framework,Asp.net Mvc,Entity Framework,我有一个模型课,如下所示 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).FirstorDefa

我有一个模型课,如下所示

 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和年龄以及更新年龄


谢谢

首先,您只选择年龄

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();

不是现成的,不是。实体框架的工作方式是跟踪完整的对象。您需要完整的对象才能对该对象进行更改和更新。否则,EntityFramework只会将所有其他属性都置空,因为它将解释为您打算通过不发送任何内容来清除这些值


但是,您可以直接使用数据库,并发出更新或调用将手动执行更新的存储过程。如果您愿意,您可以在您的上下文中执行此操作,然后仅从控制器中调用该方法,这样所有数据库内容仍然位于同一位置。在上下文中,
数据库
实例属性包含了直接执行SQL所需的一切。

您可以使用存储过程来实现这一点,但您遇到了什么问题?您可以将该逻辑缩短一点:var employee=dc.employes.Find(id);你解决问题了吗?