这是EF4。我有一个简单的问题。假设我向上下文对象添加了一些销售订单,如:
Dim NewOrder = context.SalesOrders.CreateObject()
NewOrder.Number= 123
context.SalesOrders.AddObject(NewOrder)
我还没有调用SaveChanges(),想要查看上下文中是否有使用Number = 123的订单:
context.SalesOrder.FirstOrDefault(Function(x) x.Number=123)
为什么世界上这个查询会返回Nothing?它是在搜索数据库而不是本地上下文对象吗?
答案 0 :(得分:0)
Number是SalesOrder实体的主键吗?
如果是这样,你可以使用.Find(),因为它首先查询本地实体,然后只有在本地实体集合中找不到任何内容时才查询数据库:
context.SalesOrders.Find(number);
请注意,find只能接受主键而不能像其他LINQ操作那样接受lambdas。
答案 1 :(得分:0)
您可以通过对象状态管理器搜索本地实体:( C#语法,但VB.NET等效项对您来说应该是显而易见的)
context.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified | EntityState.Unchanged).Select(entry => entry.Entity).OfType<SalesOrder>()
这实际上也是DbSet.Local
在幕后所做的事情。可能值得努力使其在您的上下文中作为通用辅助函数使用。