EF选择声明

时间:2015-11-13 14:36:59

标签: 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).FirstorDefault();
 employee.Age ="22";
 db.SaveChanges();

我的问题是更新年龄我需要获取所有列是否有任何方式我只能获取ID和年龄并更新年龄;

谢谢

2 个答案:

答案 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所需的一切。