一、前段时间对于WCF+LinqTosql的数据更新,我使用的办法是:
.attach(modified_entity,original_entity)
.SubmitChanges()
这种更新方式要在Silverlight端代码中不断记忆原始的实体(original_entity),给程序代码编写带来麻烦。在于websco(Sunpire)讨论关于数据更新问题时发现他也遇到这样的麻烦,我们为此讨论了一晚上至深夜,他把这种数据更新方式称为“整体更新”,虽然他认为这种数据更新方不好,但也提不出新的解决办法。其实之前我也觉得这种数据更新办法确实有问题,不得已又花了点时间调试代码,试图找出解决办法。
二、又试了其他两个解决办法
方法一
.attach(modified_entity)
.SubmitChanges()
方法二
.attach(modified_entity,true)
.SubmitChanges()
第一种反法,可以正确执行,但是没有结果,数据没有被更新;
第二种方法,不能正确执行,返回错误提示:“如果实体声明了版本成员或者没有更新检查策略,则只能将它附加为没有原始状态的已修改实体。”,错误提示我没有看明白,只好求助与帮助文件如下:
其中有一段话讲得正好是这个意思,这段话在图中已经标出,具体如下:
备注
如果以修改状态附加,则实体必须声明一个版本号或不得参与更新冲突检查。附加新的实体后,将会初始化所有子集合(例如,关联表中的实体的 EntitySet 集合)的延迟加载程序。调用 SubmitChanges 后,子集合的成员将被置于 Unmodified 状态。若要更新子集合的成员,必须显式调用 Attach,并指定该实体。
看到这里我基本明白了怎样做了。
三、得到正确的方案
回到项目中修改了LingTosql项目中的student实体的每个属性的“更新检查”项选择“从不”,操作如图:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。