Linq-to-SqlSubmitChanges不更新字段...为什么?我昨晚发布了这个问题,这让我遇到了一个大问题!我的数据库中有一个名为Units的小数列,每当我将该列的值设置为非零时,SubmitChanges列就会更新为新值。如果我尝试将列的值设置为零,SubmitChanges不会更新该列。data.Units=this.ReadProperty(UnitsProperty);data.UnitPrice=this.ReadProperty(UnitPriceProperty);data.Price=this.ReadProperty(PriceProperty);我查看了DataContext日志,我可以看到查询不包含具有零值的字段。即使我尝试对代码进行硬编码,Linq也会忽略它。数据.Units=0;数据.UnitPrice=0;数据.价格=0;不用说,这简直要了我的命!任何想法为什么会这样?解决方案我在SO社区的帮助下解决了我的问题。我的问题是因为当我创建我的实体追加时,列的默认值设置为零,所以当它试图将值分配给零时......LinqToSql说嘿......没有改变,所以我没有更新值。我现在正在做的......只是为了让它工作如下:ctx.DataContext.InvoiceItems.Attach(data,true);这似乎强制将所有值写入数据库。这暂时有效。我试图用下面的代码重现它,但对我来说它有效。使用(DataClasses1DataContextctx=newDataClasses1DataContext()){varobj=ctx.DecimalColumnTables.First();Debug.Assert(obj.B!=0);obj.B=0;ctx.SubmitChanges();所以我认为你的领域中一定有什么特别的东西导致了这个。我建议您使用域模型创建一个像这样的简单重现,然后看看会发生什么。LINQtoSQL忽略对当前值的更新,因此如果该字段已经为零,您可能看不到任何更新。关闭:您使用的OR/M是LINQtoSQL。LINQ是.NET中查询函数的名称,但LINQ没有定义也没有实现任何更新逻辑。所以这个问题是关于LINQtoSQL,而不是LINQ。显而易见的问题,但您确定列已映射到dbml/映射文件中吗?另外-它是一个计算列吗?(ieprice=>unit*unitprice)我在SO社区的帮助下解决了我的问题。我的问题是因为当我创建我的实体追加时,列的默认值设置为零,所以当它试图将值分配给零时......LinqToSql说嘿......没有改变,所以我没有更新值。我现在正在做的......只是为了让它工作如下:ctx.DataContext.InvoiceItems.Attach(data,true);这似乎强制将所有值写入数据库。这暂时有效。更多信息......我想通了我的问题......更多的是缺乏对LinqToSql的理解......我在做什么:privatevoidChild_Update(Invoiceparent){using(varctx=Csla.Data.ContextManager.GetManager(Database.ApplicationConnection,false)){vardata=newGimli.Data.InvoiceItem(){InvoiceItemId=ReadProperty(InvoiceItemIdProperty)};ctx.DataContext.InvoiceItems.Attach(数据);if(this.IsSelfDirty){//Updateproperties}}}我以为这会加载原始值...发生的事情是它创建了一个具有默认值的新对象...空值,例如0表示小数,Guid.Uniqueidentifiers等为空。因此,当它更新属性时,它会将Units视为0,并将其设置为零。好吧,LinqToSql不会将此识别为更改,因此它不会更新该字段。所以我必须做的是:ctx.DataContext.InvoiceItems.Attach(data,true);现在所有修改都在更新语句中生成,无论是否实际发生了更改。这行得通……似乎有点骇人听闻!许多人指出的正确答案是使用Attach的特殊重载,它采用布尔参数将其视为已修改,(使用其他重载的错误,根本不起作用):ctx.DataContext.InvoiceItems.Attach(数据,真实);但是请注意,您可能仍需要在“时间戳”类型的表中包含一个“版本”列。我遇到了这个问题,但我看到的所有建议都不适用或有效。但是我发现我犯了一个很简单的错误!当更新一个属性时,我实际上调用了一个自定义的Set方法(因为有其他的东西需要改变以响应有问题的主要属性)。经过几个小时的摸索,我注意到我的Set方法正在更新一个私有成员而不是一个公共属性,即this._Walking=value;我所要做的就是将其更改为this.Walking=value;这一切都奏效了奏效了!以上是C#学习教程:Linq-to-SqlSubmitChanges不更新字段...为什么?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
