Subsonic 现有记录上的亚音速保存问题
我使用我的repo从数据库中获取对象,如下所示:Subsonic 现有记录上的亚音速保存问题,subsonic,Subsonic,我使用我的repo从数据库中获取对象,如下所示: Public Shared Function GetOrderFulfillment(ByVal OrderNumber As Integer) As OrderFulfillment Dim objCustomerOrder = DB.Select().From(Tables.OrderFulfillment).Where(Columns.OrderNumber).IsEqualTo(OrderNumber).ExecuteSingle(O
Public Shared Function GetOrderFulfillment(ByVal OrderNumber As Integer) As OrderFulfillment
Dim objCustomerOrder = DB.Select().From(Tables.OrderFulfillment).Where(Columns.OrderNumber).IsEqualTo(OrderNumber).ExecuteSingle(Of OrderFulfillment)()
objCustomerOrder.MarkOld()
Return objCustomerOrder
End Function
更改某些值并将其保存回:
orderFulfillment.OrderTotal = newOrderTotal + netShipping + netTax
orderFulfillment.TotalShippingCost = netShipping
orderFulfillment.Tax = netTax
orderFulfillment.AutoShipDiscount = order.AutoShipDiscount * -1
orderFulfillment.Shipping = totalShipping
orderFulfillment.RefundAmount = totalRefundAmount
orderFulfillment.ActualShippingCost = ActualCost
orderFulfillment.HandlingFee = HandlingFee
orderFulfillment.Save("AutomatedUpdateOrderStatus")
这会生成以下SQL,但由于明显的原因失败:
exec sp_executesql N'UPDATE [ultrawellness].[OrderFulfillment] SET WHERE [OrderFulfillmentID] = @OrderFulfillmentID; SELECT @OrderFulfillmentID AS id',N'@OrderFulfillmentID int',@OrderFulfillmentID=7055
我的设定值到底在哪里?我已经用了无数次同样的模式-为什么它在这一个阻塞
设置了将保存应用于以下对象的对象的FYI:
.IsDirty=True
.DirtyColumns=0
我认为DirtyColumns不应该是0,因为我更新了很多,但这只是一个猜测
有人吗?可能是因为查询与行不匹配,所以共享方法不返回现有记录吗?在这种情况下,objCustomerOrder是一个新对象 检查objCustomerOrder.IsLoaded以确保 如果您有一个新对象并对其调用MarkOld(),则可能会导致问题
我建议在这种情况下不要使用MarkOld,因为亚音速足以正确处理它(除非您明确希望将新对象设置为old)我更改了代码以使对象:
Dim objCustomerOrder = New Model.OrderFulfillment("OrderNumber", OrderNumber)
这解决了我的.IsNew问题和我的保存问题。第一个查询只是一个查询,如果您愿意,它不是ActiveRecord“系统”的一部分。换句话说,我们不知道那个物体是从哪里来的
但是,如果您像上面的示例那样(调用新对象()),那么我们知道您提取了一个现有记录,并且我们可以跟踪它的更改。出于某种原因,在VB.Net Dim objCustomerOrder=DB.Select().From(Tables.OrderFulfillment).Where(Columns.OrderNumber).IsEqualTo(OrderNumber).ExecuteSingle(Of OrderFulfillment)()结果是.IsNew为true,即使它是一条现有记录,因此我必须在我的项目中MarkOld()无法确认这一点(目前为2.2@r523+一些补丁,但与IsNew being set false无关)。