LINQ to SQL: DataContext.SubmitChanges() 失效问题
当 DataContext (及其继承类) 的 ObjectTrackingEnabled = True(默认值)时:
1.如果用 DataContext 取出了某类(Tables)的实例对象,例如调用了First, FirstOrDefault, All, Last, LastOrDefault,...
2.那么,只要你对该对象的任何属性(Property) 进行了赋值操作,DataContext 就自动跟踪到这个动作。
3.此后,一旦调用 SubmitChanges() 就将这些改变保存到数据库中去。
但是很不幸的是,DataContext 对对象的赋值操作和复制操作却视而不见。
例如:
1.以下代码,将程序执行更新操作时(在代码中有Mark标记的分支),其后的dc.SubmitChanges()不会工作。
SimboxDataContext dc = new SimboxDataContext();
aspnet_User u = dc.aspnet_Users.First(c=>c.UserName==User.Identity.Name);
Messenger newMessenger = new Messenger();
newMessenger.UserID = u.UserId;
newMessenger.CurrentFlag = chkCurrentFlag.Checked;
int nTransmitLimit = 0;
int.TryParse(txtTransmitLimit.Text, out nTransmitLimit);
newMessenger.TransmitLimit = nTransmitLimit;
newMessenger.ModifiedDate = DateTime.Now;
Messenger originalMessenger = dc.Messengers.FirstOrDefault(c => c.UserID == u.UserId);
if (originalMessenger == null)
{
dc.Messengers.InsertOnSubmit(newMessenger);
}
else
{
originalMessenger = newMessenger; // Mark
}
dc.SubmitChanges();
2.必须将:
originalMessenger = newMessenger; // Mark
替换为:
//originalMessenger = newMessenger;
//originalMessenger.UserID = u.UserId;
originalMessenger.CurrentFlag = newMessenger.CurrentFlag;
originalMessenger.TransmitLimit = newMessenger.TransmitLimit;
originalMessenger.ModifiedDate = newMessenger.ModifiedDate;
我认为这个问题的影响不可小觑,因为,当我们将数据处理移去DAL(Data Access Lay),将这种业务逻辑移去BLL (Business Logic Layer) 后,传来传去的数据都是这种封装后的对象。
偶正在探寻能够解决或回避这个问题的方案,如有资料请Comment给我,谢谢先^_^
转载于:https://www.cnblogs.com/SoulStore/archive/2008/11/27/1342320.html
LINQ to SQL: DataContext.SubmitChanges() 失效问题相关推荐
- LINQ To SQL 语法及实例大全
LINQ to SQL语句(1)之Where Where操作 适用场景:实现过滤,查询等功能. 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子 ...
- LINQ to SQL语句(1)之Where(抄的好)
Where操作适用场景:实现过滤,查询等功能.说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子句.Where操作包括3种形式,分别为简单形式.关 ...
- ScottGu之博客翻译-LINQ to SQL第四部分,更新数据库 LINQ to SQL (Part 4 - Updating our Database)...
原贴链接: http://weblogs.asp.net/scottgu/archive/2007/07/11/linq-to-sql-part-4-updating-our-database.asp ...
- LINQ to SQL语句 收藏系列
KB-Transaction in Linq to SQL http://blog.darkthread.net/post-2008-05-14-transaction-in-linq-to-sql ...
- C# LINQ TO SQL
LINQ to SQL语句(1)之Where Where操作 适用场景:实现过滤,查询等功能. 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它 ...
- Linq to Sql 语句全集
LINQ to SQL语句(1)之Where Where操作 适用场景:实现过滤,查询等功能. 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子 ...
- LINQ to SQL 之DataContext用法
DataContext作为LINQ to SQL框架的主入口点,为我们提供了一些方法和属性,本文用几个例子说明DataContext几个典型的应用. 创建和删除数据库 CreateDatabase方法 ...
- 如何查看Linq to SQL运行时,实际执行的Sql语句
调试Linq to sql代码是, 如果遇到错误,很难判断错误的原因是什么,如果能够输出实际执行的sql原文,对于我们寻找错误的原因有有很大帮助. 以下是我用到的方法: StringBuilder s ...
- .NET 3.5(12) - DLINQ(LINQ to SQL)之事务处理和并发处理
步步为营VS 2008 + .NET 3.5(12) - DLINQ(LINQ to SQL)之事务处理和并发处理 作者:webabcd 介绍 以Northwind为示例数据库,DLINQ(LINQ ...
最新文章
- 软件架构设计学习总结(14):大型网站技术架构(八)网站的安全架构
- 【数据竞赛】盘点Kaggle中常见的AutoEDA工具库
- nginx模块_使用gdb调试nginx源码
- php:兄弟连之面向对象版图形计算器1
- c语言算ex自定义函数,用C语言写定积分的通用函数:sin(x),cos(x),eX.
- Scrapy源码阅读分析_3_核心组件
- 第二十一:基于Python2+Selenium3+Pytest4+Pytest-Html的UI自动化框架
- OneNET物联网云平台HTTP数据流上传与下发,使用Fiddler调试开关应用,stm32 esp8266物联网家居远程开关
- extjs 方法执行顺序_(软件工程)非结构化程序变为结构化程序的三种方法
- 将类实现分开以及代码块
- PHP 进程间通信——消息队列(msg_queue)
- CCAA 信息安全管理体系 考试大纲及重点题目记忆
- IText与pdfObject.js在线展示后台生成pdf文件流
- 苹果黑屏就断开无线网连接服务器,跪求苹果手机黑屏以后断开无线网的解决方案!...
- intellij idea JDK设置
- Linux--入门必学指令【详细拓展】
- 程序员身体自测健康5大标准
- SpringSecurity(Web权限方案)
- 《离散数学及其应用》读书笔记【一】逻辑和证明
- 暨南大学计算机科学系怎么样,暨大毕业生最吃香的十个专业,毕业五年平均月薪过万的竟是这几个!...
热门文章
- centos7python命令_CentOS7中将Python2.7.5 升级到Python3.5.2
- hbuilder怎么没法插入字符了_一个你所不知道的加密方式--零宽字符加密
- 三菱gxworks3安装失败_三菱电梯nexway故障表
- php微信支付分取消订单,微信支付PHP开发教程五关闭订单
- python做大型网站_Python中的大型Web应用:一个好的架构
- Oracle使用imp/exp导入/导出数据库
- mongodb 安装启动
- 拥有此神技,脚本调试从此与 echo、set、test 说分手
- java 对比度,java批改图片亮度对比度
- python截取后三位元素_python – 如何从BeautifulSoup的表中获取第一个和第三个td?...