Linq to SQL的where 0=1 的问题

  今天,为了适应需求的改变,而给表TableA(化名)添加了一个字段ReplyTo

IF   NOT   EXISTS SELECT   *   FROM  sys.Columns  WHERE  name  = N ' ReplyTo '   AND   object_id = object_id (N ' [OPQ_TableA] ' ))
ALTER   TABLE   [ OPQ_TableA ]    WITH   CHECK   ADD  ReplyTo  varchar ( 256 null

 

运行完这句后,OPQ_TableA就添加了一个字段ReplyTo,并且值都是NULL。
然后,给LinqToSQL类文件OPQ.dbml中的表OPQ_TableA,手工添加属性ReplyTo:
NameReplyTo
Server Data TypeVarChar(256)
SourceReplyTo
忘了给它的属性Nullable设置为True了。在其它设计做完后。手工测试更新数据时,报错错,很奇怪的错误信息:
 System.Data.Linq.ChangeConflictException: Row  not  found  or  changed. at System.Data.Linq.ChangeProcessor.SubmitChanges(ConflictMode failureMode)
用LINQ To SQL碰到奇怪的错误信息是不奇怪了。
用SQL Server Profiler跟踪一下SQL的执行情况。发现Update语句竟然是
exec  sp_executesql N ' UPDATE [dbo].[OPQ_TableA]
SET ...
WHERE 0 = 1
' ,N '... ' ,...
这下,就奇怪了,怎么更新条件回是 0 = 1 呢?这不是不更新任何记录吗?也许是DataContext的设置和数据库的结构不一致,造成LINQ不知道怎么生成SQL,就搞出一个可以造成异常的语句吧。
当我把ReplyTo属性的Nullable设置为True后,就正常运行了。
而,把ReplyTo属性的Nullable设置为错误的False之后,再把ReplyTo的值NULL改为空的字符串之后。Linq竟然可以生成正确的SQL,继续奇怪。但我不管了,:-)

转载于:https://www.cnblogs.com/asterzhao/archive/2008/12/19/1358395.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值