zoukankan      html  css  js  c++  java
  • 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给我,谢谢先^_^

  • 相关阅读:
    ARM里面的APB和AHB
    解决win10点击开始按钮无反应
    keil的51和ARM共存方法
    对于一个液晶而言什么是读状态、读数据、写指令、写数据
    关于VMware中Ubuntu 出现Unknown Display问题解决
    论基于SOA的面向服务架构设计及其应用
    科技小论文2
    软件体系架构的质量属性--论文
    一线架构师实践指南阅读笔记03
    一线架构师阅读指南-阅读感想02
  • 原文地址:https://www.cnblogs.com/SoulStore/p/1342320.html
Copyright © 2011-2022 走看看