现有记录的SubSonic保存问题

时间:2009-07-02 15:49:25

标签: 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(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,因为我更新了一堆,但这只是猜测?

任何?

3 个答案:

答案 0 :(得分:2)

第一个查询只是 - 一个查询,如果你愿意,它不是ActiveRecord“系统”的一部分。换句话说,我们不知道该对象来自何处。

但是,如果您按照上面的示例(调用新的Object())执行操作,那么我们知道您已经删除了现有记录,我们可以跟踪其更改。

答案 1 :(得分:1)

可能是您的共享方法没有返回现有记录,因为查询与行不匹配?在这种情况下,objCustomerOrder是一个新对象。

检查objCustomerOrder.IsLoaded以确定。

如果你有一个新的Object并在其上调用MarkOld(),那可能会导致问题。

我建议不要在这种情况下使用MarkOld,因为SubSonic很聪明,应该正确处理它(除非你明确想要将一个新对象设置为旧)

答案 2 :(得分:0)

我更改了代码以获取对象:

  Dim objCustomerOrder = New Model.OrderFulfillment("OrderNumber", OrderNumber)

这解决了我的.IsNew问题以及我的保存问题。