C# 更新EF 4.1中的记录

C# 更新EF 4.1中的记录,c#,.net,sql,entity-framework,entity-framework-4.1,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).

我有一个雇员对象说:

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()。对于一个可以在对数据库的单个查询中完成的任务,我必须发出两个查询:1)获取对象2)更新所需对象并保存更改

对于传统的存储过程方法,我只需传递Id,传递新名称并编写Update语句,就完成了。实体框架真的有那个么低效吗,还是我遗漏了什么?

你们应该使用这个方法


您可以有选择地更新列:

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

我相信这:回答了您的问题。其他属性呢?比如地址等?它们会保持原样还是全部变为空?更新,与Ladislav的答案相同谢谢。您还可以修改删除的答案吗?如何更改上述代码以删除实体?我可以只进行附加,然后从DBSet中删除并调用SaveChanges吗?这样行吗?
var employee = new Employee() { Id = someId, Name = "Jack" }
Db.Employees.Attach(employee);
Db.Employees.Entry(employee).Property(e => e.Name).IsModified = true;

Db.SaveChanges();