Subsonic 现有记录上的亚音速保存问题

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

我使用我的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
我的设定值到底在哪里?我已经用了无数次同样的模式-为什么它在这一个阻塞

设置了将保存应用于以下对象的对象的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无关)。