关于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.aspx,http://msdn.microsoft.com/zh-cn/library/system.flagsattribute.aspx