这是 WPF + MVVM + EF。我的数据库中有一张销售订单表。在 UI 中,我显示了一个包含所有 SalesOrderNumbers 的 ComboBox 和一个带有标签和 TextBoxes 的网格,它们显示了 ComboBox 中所选订单的详细信息。考虑以下 ViewModel:
Class SalesOrderViewModel
Public Property AllSalesOrderNumbers As List(Of Integer)
Public Sub New()
AllSalesOrderNumbers = context.SalesOrders.Select(Function(x) x.orderNumber).ToList()
If AllSalesOrderNumbers.Count > 0 Then SelectedOrderNumber = AllSalesOrderNumbers(0)
End Sub
Private Property mSelectedOrderNumber As Integer
Public Property SelectedOrderNumber As Nullable(Of Integer)
Get
Return mSelectedOrderNumber
End Get
Set(value As Nullable(Of Integer))
mSelectedOrderNumber = value
End Set
End Property
Public ReadOnly Property SelectedOrder As SalesOrder
Get
Return context.SalesOrders.FirstOrDefault(Function(x) x.orderNumber = SelectedOrderNumber)
End Get
End Property
End Class
在 UI 中,ComboBoxItemsSource
绑定AllSalesOrderNumbers
并SelectedValue
绑定到SelectedOrderNumber
(with Mode=OneWayToSource
)。另一方面,Grid 的 DataContext 绑定到SelectedOrder
. 整个工作正常。
我的问题是关于“新销售订单”按钮。为了添加新记录,ICommand
在我的 ViewModel 中添加了一个,它基本上执行以下操作:
Dim NewOrder = context.SalesOrders.CreateObject()
context.SalesOrders.AddObject(NewOrder)
mSelectedOrderNumber = NewOrder.orderNumber
AllSalesOrderNumbers.Add(mSelectedOrderNumber)
我对以下内容感到困惑:
SelectedOrder
在模型中查询 SelectedOrderNumber 属性的当前值。由于数据库还没有这个新记录,它返回 null。在去数据库之前,我如何要求它查看本地上下文对象?与 DataSet 不同,它不会为 分配负递增的标识值
orderNumber
,所以我想知道如果我添加另一个订单会发生什么。context.SalesOrders
在上面的第二行 (context.SalesOrders.AddObject(NewOrder)
) 执行后,我没有在集合中看到新添加的订单对象。