【发布时间】:2010-09-28 00:34:44
【问题描述】:
我昨天晚上发布了这个question,这让我发现了一个巨大的问题!
我的数据库中有一个名为 Units 的小数列,每当我将该列的值设置为非零时,并且 SubmitChanges 使用新值更新该列。如果我尝试将列的值设置为零,SubmitChanges 不会更新该列。
data.Units = this.ReadProperty<decimal>(UnitsProperty);
data.UnitPrice = this.ReadProperty<decimal>(UnitPriceProperty);
data.Price = this.ReadProperty<decimal>(PriceProperty);
我查看了 DataContext 日志,可以看到具有零值的字段未包含在查询中。即使我尝试对更改进行硬编码,Linq 也会忽略它。
data.Units = 0;
data.UnitPrice = 0;
data.Price = 0;
不用说这是要了我的命!任何想法为什么会发生这种情况?
解决方案
在 SO 社区的帮助下,我发现了我的问题。我的问题是由于当我创建要附加的实体时,列的默认值设置为零,所以当它试图将值分配为零时...... LinqToSql 说嘿......没有任何改变,所以我没有更新值。
我现在正在做的......只是为了让它发挥作用:
ctx.DataContext.InvoiceItems.Attach(data, true);
这似乎迫使所有值将自己写入数据库。这暂时有效。
【问题讨论】:
-
在您的类中获得了任何部分方法,例如 OnCreated() 或 OnChanged() 造成干扰?你对你的模型进行了三次直觉检查吗?
-
@Dave Silly 问题......但是你所说的三重肠道检查是什么意思?
-
我的意思是现在还早,我还没有喝咖啡。 ;-) 我的意思是您是否根据您的数据库仔细检查了您的 dbml 文件的定义(数据类型、可为空、关系)?
-
明白了! =) 我现在正在这样做......到目前为止一切看起来都很好。我的意思是它确实改变了值,而不是当我试图使其为零时!
-
你能确认你已经为 SQL 表创建了一个主键,并且 linq 对象知道这个小事实吗? Linq 不会告诉你什么,只是不会更新表格。我希望这会有所帮助。
标签: c# .net linq linq-to-sql