gpt4 book ai didi

c# - Linq-to-Sql SubmitChanges 不更新字段......为什么?

转载 作者:太空狗 更新时间:2023-10-29 21:16:01 26 4
gpt4 key购买 nike

我发布了这个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);

这似乎迫使所有值将它们自己写入数据库。这目前有效。

最佳答案

我试图用下面的代码重现这个,但对我来说它有效。

using (DataClasses1DataContext ctx = new DataClasses1DataContext())
{
var obj = ctx.DecimalColumnTables.First();
Debug.Assert(obj.B != 0);
obj.B = 0;
ctx.SubmitChanges();
}

所以我认为您的域中一定有一些特殊的东西导致了这种情况。我建议您使用领域模型创建一个如此简单的重现,然后看看会发生什么。

LINQ to SQL 忽略对当前值的更新,因此如果该字段已经为零,您可能看不到任何更新。

关闭:您使用的 OR/M 是 LINQ to SQL。 LINQ 是 .NET 中查询功能的名称,但 LINQ 没有定义也没有实现任何更新逻辑。所以这个问题与 LINQ to SQL 相关,而不是 LINQ。

关于c# - Linq-to-Sql SubmitChanges 不更新字段......为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/386211/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com