2010-01-16 62 views
3

当我的数据库中的新实体被创建,然后我从datacontext请求一个表时,新的实体不会出现。 是linq缓存表并返回缓存版本?如果是的话,我该如何阻止linq这样做。从缓存表中停止linq

DALConnector.Dc.Order.InsertOnSubmit(NewOrder); 
DALConnector.Dc.SubmitChanges(); 

现在我点击一个按钮,显示上有一个gridview的数据绑定到DALConnector.Dc.Order不显示新订单

回答

2

你如何重新绑定网格形式?它不缓存结果,所以我不确定为什么这是一个问题。您必须重新查询上下文以获取新记录......或者,如果您正在重新绑定对象的记录(例如您是绑定客户),则可以使用ensurihg将订单添加到客户对象的订单集合中,而不需要重新查询。

因此,如果你以这种方式结合:

grid.DataSource = customer.Orders; 

只能获得新的订单回来,如果你做的事:

customer.Orders.Add(newOrder); 
dc.Orders.InsertOnSubmit(newOrder); 
dc.SubmitChanges(); 

然后,你可以直接绑定customer.Orders。

0

Linq2Sql DataContext不缓存整个表,它只有一个检索实体的缓存用于更改跟踪目的。如果您在插入订单后使用新的DataContext进行查询,则结果可能会相同。

因为您正在使用Linq2Sql,它只能与SQL Server一起使用,所以我建议启动SQL Server Profiler并检查是否真正的insert语句首先提交给数据库。

检查你的dbml,你使用运行时插入还是存储过程Order

另外检查你是否没有吞咽DataContext可能引发的任何异常SubmitChanges()

如果这没有帮助,请添加您的查询代码,以便我们也可以验证它。