文章内容

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字段已经改变。

 转载自:cn-blogs NicholasPei

分享到:

发表评论

评论列表