Entity Framework 中如何更新表中的某个字段

声明:如果你觉得这里的布局看着不舒服:建议你来这里阅读:Entity Framework 中如何更新表中的某个字段

 

通常大家特别是初学EF的朋友可能会发现EF中更新一个数据库中某个表某一列的值一般的例子中都不会有的。

大家基本上都是使用Table和View来直接整个Entity去更新。

比如:

我们更新一个实体User(包含字段:ID,FirstName,LastName)。

image

 

当然,在这个Update操作之前我们需要先插入一条数据到表中。

image

选用这种方式更新时,因为是attach,所以ORM会把整个表中的ID为1的字段全部更新。对于字段比较少的表来说这个还能接受,但是如果我们的表中字段超过50个,那么这个Update操作将会是很理想的。

image

如果我们需要的只是更新FirstName,那么可以直接只去更新FirstName这个字段吗?是可以的。这就得借助于存储过程。

在Entity Framework中使用存储过程,可能你没试用过。 其实它和Table的使用差不多。

创建一个存储过程来更新FirstName。

image

  

在下一步创建ADO.NET Data Model时记得把存储过程给加进来。创建好Model后,(这里使用的是edmx文件自动生成Mapping代码。没使用POCO)。与只是使用表和视图相比,使用存储过程作为Model的DataSource你需要在表的Mapping详细信息下面选择你这个表用到的存储过程,如下图:

image

这个例子中只有一个存储过程,我们只有选UpdateFirstName。编译以后你们在edmx的设计模式中看到多了一个function():

1 publicintUpdateFirstName(Nullable<global::System.Int32>iD,global::System.String firstName)2 {3 ObjectParameter iDParameter;4 if(iD.HasValue)5 {6 iDParameter=newObjectParameter("ID", iD);7 }8 else9 {10 iDParameter=newObjectParameter("ID",typeof(global::System.Int32));11 }12 13 ObjectParameter firstNameParameter;14 if(firstName!=null)15 {16 firstNameParameter=newObjectParameter("FirstName", firstName);17 }18 else19 {20 firstNameParameter=newObjectParameter("FirstName",typeof(global::System.String));21 }22 23 returnbase.ExecuteFunction("UpdateFirstName", iDParameter, firstNameParameter);24 }25

EF已经自动把为存储过程生成一个function并把它导入到了ObjectContext中。Amazing。。。。。。。。。。

OK,接下来就是我们来使用这个Update方法了。很简单:

1 2 //Execute the Update First Name function3 inti=EfDb.UpdateFirstName(1,"rename");4 5 //you will found the firstname has changed ,who Id is '1'6 EfDb.SaveChanges();

查询一下结果你会发现ID为1的记录Firstname字段已经改变。

 

Cheers

Nic

Technorati Tags: Entity Framework