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);你解决问题了吗?