LINQ TO SQL 刷新内存映射对象
2013-04-02 15:14
239 查看
最近用LINQ TO SQL做东西,发现在SQL SERVER MANAGEMENT STUDIO中手动修改了数据之后,自己的应用程序居然没有刷新,依然使用的是内存中的数据。
后查询得知,LINQ对于内存映射中的对象的更新是有规则的,摘录如下,如果你的应用程序有其他非LINQ TO SQL来修改数据库的情况,可以采用下述方法:
默认
当数据库通过其它程序插入新记录时,读取a.DBItem时会自动得到新数据
当数据库通过其它程序修改记录的主键时,读取a.DBItem时会自动得到新数据
当数据库通过其它程序修改记录的非主键时,读取a.DBItem时不会自动得到新数据,要使用Refresh的.RefreshMode.OverwriteCurrentValues刷新
a.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, a.DBItem);
RefreshMode.KeepCurrentValues
强制 Refresh 方法使用从数据库检索的值替换原始值。不会修改当前值。
RefreshMode.KeepChanges
强制 Refresh 方法保留已更改的当前值,但将其他值更新为数据库值。
RefreshMode.OverwriteCurrentValues
强制 Refresh 方法使用数据库中的值重写所有当前值。
PS:另外还可以重新new一个对象的方法来获取更新之后的值。
后查询得知,LINQ对于内存映射中的对象的更新是有规则的,摘录如下,如果你的应用程序有其他非LINQ TO SQL来修改数据库的情况,可以采用下述方法:
默认
当数据库通过其它程序插入新记录时,读取a.DBItem时会自动得到新数据
当数据库通过其它程序修改记录的主键时,读取a.DBItem时会自动得到新数据
当数据库通过其它程序修改记录的非主键时,读取a.DBItem时不会自动得到新数据,要使用Refresh的.RefreshMode.OverwriteCurrentValues刷新
a.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, a.DBItem);
RefreshMode.KeepCurrentValues
强制 Refresh 方法使用从数据库检索的值替换原始值。不会修改当前值。
RefreshMode.KeepChanges
强制 Refresh 方法保留已更改的当前值,但将其他值更新为数据库值。
RefreshMode.OverwriteCurrentValues
强制 Refresh 方法使用数据库中的值重写所有当前值。
PS:另外还可以重新new一个对象的方法来获取更新之后的值。
相关文章推荐
- 地磅称量系统之(17~23)使用LINQ to SQL Classes模板将数据表和存储过程映射成对象
- 地磅称量系统之(55) 扩展LINQ to SQL Classes将数据表映射成对象后不具有的验证规则
- linq to sql统一更新方法,直接返回更新的对象(解决更新后再刷新数据错误显示问题)
- LINQ to SQL的对象模型和基于Attribute的映射
- 在使用Linq to SQL并序列化一个数据对象的时候报System.InvalidOperationException异常,序列化类型XXX的对象时检测到循环引用。
- LINQ to SQL 数据库与LINQ对象的关系
- LINQ体验(一) to SQL语句之对象标识和对象加载
- LINQ to SQL 数据库与LINQ对象的关系
- LINQ to SQL 不使用O/R设计器建表对象
- LINQ体验(12)——LINQ to SQL语句之对象标识和对象加载
- Linq to sql:外部映射文件
- LINQ to SQL 数据库与LINQ对象的关系
- LINQ to SQL 不使用O/R设计器建表对象
- LINQ to SQL语句(16)之对象标识
- LINQ体验(12)——LINQ to SQL语句之对象标识和对象加载
- linq to sql 动态表名,修改表映射,EF是否支持
- [代码]如何使用为多个结果形状映射的存储过程(LINQ to SQL)
- LinqToSQL下实现动态表名的映射
- Linq TO SQL中映射属性的说明
- LINQ to SQL 不使用O/R设计器建表对象