美国银行卡Payoneer注册奖励25美元

声明:如果你觉得这里的布局看着不舒服:建议你来这里阅读: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 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字段已经改变。

 

Cheers

Nic

Technorati Tags: Entity Framework

 

posted on 2010-10-29 21:51  Nic Pei  阅读(13779)  评论(11编辑  收藏  举报