更新EF 4.1中的记录

时间:2012-08-05 08:30:51

标签: c# .net sql entity-framework entity-framework-4.1

我有一个员工对象说:

public class Employee
{
    public int Id {get; set;}
    public int Name {get; set;}
    public int Address {get; set;}

 ...other few 10's of properties
}

问题是我如何才更新姓名?例如。如果我想更新姓名我做

Employee e = Db.Employees.Where(e => e.Id == someId).SingleOrDefault();
e.Name = "Jack";
Db.SaveChanges();

正如您所看到的,为了更新,我必须首先获取对象,然后更新然后调用SaveChanges()。对于可以在对数据库的单个查询中完成的任务,我必须触发2个查询:1)获取对象2)更新所需对象并保存更改。

对于传统的存储过程方法,我只需传递Id,传递新的Name并编写Update语句,我就完成了。实体框架真的效率低下还是我错过了什么?

2 个答案:

答案 0 :(得分:5)

您可以有选择地更新列:

var employee = new Employee() { Id = someId, Name = "Jack" }
Db.Employees.Attach(employee);
Db.Employees.Entry(employee).Property(e => e.Name).IsModified = true;

Db.SaveChanges();

注意:只有带有.NET 4.5的EF 5才支持将IsModified设置回false

答案 1 :(得分:2)

您应该使用Attach方法

var e = new Employee() { Id = someId, Name = "Jack" }
Db.Employees.Attach(e);
Db.Employees.Entry(e).Property(p => p.Name).IsModified = true

Db.SaveChanges();