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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值