文章内容
2017/2/5 16:26:09,作 者: 黄兵
Entity Framework 中如何更新表中的某个字段
通常大家特别是初学EF的朋友可能会发现EF中更新一个数据库中某个表某一列的值一般的例子中都不会有的。
大家基本上都是使用Table和View来直接整个Entity去更新。
比如:
我们更新一个实体User(包含字段:ID,FirstName,LastName)。

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

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

如果我们需要的只是更新FirstName,那么可以直接只去更新FirstName这个字段吗?是可以的。这就得借助于存储过程。
在Entity Framework中使用存储过程,可能你没试用过。 其实它和Table的使用差不多。
创建一个存储过程来更新FirstName。

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

这个例子中只有一个存储过程,我们只有选UpdateFirstName。编译以后你们在edmx的设计模式中看到多了一个function():
1 public int UpdateFirstName(Nullable<global::System.Int32> iD, global::System.String firstName)
2 {
3 ObjectParameter iDParameter;
4 if (iD.HasValue)
5 {
6 iDParameter = new ObjectParameter("ID", iD);
7 }
8 else
9 {
10 iDParameter = new ObjectParameter("ID", typeof(global::System.Int32));
11 }
12
13 ObjectParameter firstNameParameter;
14 if (firstName != null)
15 {
16 firstNameParameter = new ObjectParameter("FirstName", firstName);
17 }
18 else
19 {
20 firstNameParameter = new ObjectParameter("FirstName", typeof(global::System.String));
21 }
22
23 return base.ExecuteFunction("UpdateFirstName", iDParameter, firstNameParameter);
24 }
25 EF已经自动把为存储过程生成一个function并把它导入到了ObjectContext中。Amazing。。。。。。。。。。
OK,接下来就是我们来使用这个Update方法了。很简单:
1
2 // Execute the Update First Name function
3 int i = EfDb.UpdateFirstName(1, "rename");
4
5 // you will found the firstname has changed ,who Id is '1'
6 EfDb.SaveChanges();查询一下结果你会发现ID为1的记录Firstname字段已经改变。
评论列表