0

这是EF4。我有一个简单的问题。假设我向上下文对象添加了一些销售订单,例如:

Dim NewOrder = context.SalesOrders.CreateObject()
NewOrder.Number= 123
context.SalesOrders.AddObject(NewOrder)

我还没有调用 SaveChanges() 并且想看看在上下文中是否有一个 Number=123 的订单使用这个:

context.SalesOrder.FirstOrDefault(Function(x) x.Number=123)

为什么上面的查询什么都不返回?它是在搜索数据库而不是本地上下文对象吗?

4

2 回答 2

0

数字是 SalesOrder 实体的主键吗?

如果是这样,您可以只使用 .Find() 因为它首先查询本地实体,然后才在本地实体集合中找不到任何内容时才查询数据库:

context.SalesOrders.Find(number);

请注意,与其他 LINQ 操作一样,find 只能接受主键,不能接受 lambda。

于 2013-02-25T12:58:18.490 回答
0

您可以通过对象状态管理器搜索本地实体:(C# 语法,但 VB.NET 等效项对您来说应该很明显)

context.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified | EntityState.Unchanged).Select(entry => entry.Entity).OfType<SalesOrder>()

这实际上DbSet.Local也是幕后的工作。将其作为通用辅助函数在您的上下文中提供可能是值得的。

于 2013-02-25T15:15:14.043 回答