关于SaveChanges

使用EF4在保存时:

SaveChanges()函数有一处重载的方法 :

SaveChanges(SaveOptions)

SaveOptions 这个枚举可以传三个参数:

  • AcceptAllChangesAfterSave:就是把数据保存到数据库以后重置实体的状态。
  • DetectChangesBeforeSave:就是把数据保存到数据库之前同步实体的状态。
  • None:就是把数据保存到数据库之前,不同步实体的状态;把数据保存到数据库以后,也不重置实体的状态。

调用SaveChanges()就等同于SaveChanges(SaveOptions.AcceptAllChangesAfterSave | SaveOptions.DetectChangesBeforeSave);

对象状态:我们的每个新生成的查询返回的实体,都被保存在Context的容器中的缓存中,则ObjectStateManager 负责管理它们的状态。每一个实体只保留一个实例,每次查询只是往缓存增加之前未曾存在过的实体。对于已经存在的实体,只需要从数据库取数据并将它们的值进行合并。为了区别缓存中某个实体的前后变化,就需要专门来管理实体的状态。从数据源取到的数据与缓存中的数据进行合并时,是根据设置的合并策略去合并。

这里用到的“|”为按位枚举,以前对于枚举的这个内容没有关注,如有记不清楚的,请及时查阅,养成好的习惯,不懂的内容一定要及时解决,

给出两个链接,关于“按位枚举”http://msdn.microsoft.com/zh-cn/library/cc138362.aspxhttp://msdn.microsoft.com/zh-cn/library/system.flagsattribute.aspx

posted @ 2012-05-04 11:18  路灯下的诗人  阅读(2991)  评论(1编辑  收藏  举报