当 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() 失效问题相关推荐

  1. LINQ To SQL 语法及实例大全

    LINQ to SQL语句(1)之Where Where操作 适用场景:实现过滤,查询等功能. 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子 ...

  2. LINQ to SQL语句(1)之Where(抄的好)

    Where操作适用场景:实现过滤,查询等功能.说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子句.Where操作包括3种形式,分别为简单形式.关 ...

  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 ...

  4. LINQ to SQL语句 收藏系列

    KB-Transaction in Linq to SQL  http://blog.darkthread.net/post-2008-05-14-transaction-in-linq-to-sql ...

  5. C# LINQ TO SQL

    LINQ to SQL语句(1)之Where   Where操作   适用场景:实现过滤,查询等功能.   说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它 ...

  6. Linq to Sql 语句全集

    LINQ to SQL语句(1)之Where Where操作 适用场景:实现过滤,查询等功能. 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子 ...

  7. LINQ to SQL 之DataContext用法

    DataContext作为LINQ to SQL框架的主入口点,为我们提供了一些方法和属性,本文用几个例子说明DataContext几个典型的应用. 创建和删除数据库 CreateDatabase方法 ...

  8. 如何查看Linq to SQL运行时,实际执行的Sql语句

    调试Linq to sql代码是, 如果遇到错误,很难判断错误的原因是什么,如果能够输出实际执行的sql原文,对于我们寻找错误的原因有有很大帮助. 以下是我用到的方法: StringBuilder s ...

  9. .NET 3.5(12) - DLINQ(LINQ to SQL)之事务处理和并发处理

    步步为营VS 2008 + .NET 3.5(12) - DLINQ(LINQ to SQL)之事务处理和并发处理 作者:webabcd 介绍 以Northwind为示例数据库,DLINQ(LINQ ...

最新文章

  1. 软件架构设计学习总结(14):大型网站技术架构(八)网站的安全架构
  2. 【数据竞赛】盘点Kaggle中常见的AutoEDA工具库
  3. nginx模块_使用gdb调试nginx源码
  4. php:兄弟连之面向对象版图形计算器1
  5. c语言算ex自定义函数,用C语言写定积分的通用函数:sin(x),cos(x),eX.
  6. Scrapy源码阅读分析_3_核心组件
  7. 第二十一:基于Python2+Selenium3+Pytest4+Pytest-Html的UI自动化框架
  8. OneNET物联网云平台HTTP数据流上传与下发,使用Fiddler调试开关应用,stm32 esp8266物联网家居远程开关
  9. extjs 方法执行顺序_(软件工程)非结构化程序变为结构化程序的三种方法
  10. 将类实现分开以及代码块
  11. PHP 进程间通信——消息队列(msg_queue)
  12. CCAA 信息安全管理体系 考试大纲及重点题目记忆
  13. IText与pdfObject.js在线展示后台生成pdf文件流
  14. 苹果黑屏就断开无线网连接服务器,跪求苹果手机黑屏以后断开无线网的解决方案!...
  15. intellij idea JDK设置
  16. Linux--入门必学指令【详细拓展】
  17. 程序员身体自测健康5大标准
  18. SpringSecurity(Web权限方案)
  19. 《离散数学及其应用》读书笔记【一】逻辑和证明
  20. 暨南大学计算机科学系怎么样,暨大毕业生最吃香的十个专业,毕业五年平均月薪过万的竟是这几个!...

热门文章

  1. centos7python命令_CentOS7中将Python2.7.5 升级到Python3.5.2
  2. hbuilder怎么没法插入字符了_一个你所不知道的加密方式--零宽字符加密
  3. 三菱gxworks3安装失败_三菱电梯nexway故障表
  4. php微信支付分取消订单,微信支付PHP开发教程五关闭订单
  5. python做大型网站_Python中的大型Web应用:一个好的架构
  6. Oracle使用imp/exp导入/导出数据库
  7. mongodb 安装启动
  8. 拥有此神技,脚本调试从此与 echo、set、test 说分手
  9. java 对比度,java批改图片亮度对比度
  10. python截取后三位元素_python – 如何从BeautifulSoup的表中获取第一个和第三个td?...