我使用我的repo从数据库中获取对象:
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
世界上我的SET值在哪里?我使用了相同的模式一毫秒 - 为什么它会在这个模式上窒息?
我将应用保存到以下对象的FYI设置为: .IsDirty =真 .DirtyColumns = 0
我认为DirtyColumns不应该是0,因为我更新了一堆,但这只是猜测?
任何?
答案 0 :(得分:2)
第一个查询只是 - 一个查询,如果你愿意,它不是ActiveRecord“系统”的一部分。换句话说,我们不知道该对象来自何处。
但是,如果您按照上面的示例(调用新的Object())执行操作,那么我们知道您已经删除了现有记录,我们可以跟踪其更改。
答案 1 :(得分:1)
可能是您的共享方法没有返回现有记录,因为查询与行不匹配?在这种情况下,objCustomerOrder是一个新对象。
检查objCustomerOrder.IsLoaded以确定。
如果你有一个新的Object并在其上调用MarkOld(),那可能会导致问题。
我建议不要在这种情况下使用MarkOld,因为SubSonic很聪明,应该正确处理它(除非你明确想要将一个新对象设置为旧)
答案 2 :(得分:0)
我更改了代码以获取对象:
Dim objCustomerOrder = New Model.OrderFulfillment("OrderNumber", OrderNumber)
这解决了我的.IsNew问题以及我的保存问题。