Linq to sql 如何强制Linq to SQL不使用缓存?

Linq to sql 如何强制Linq to SQL不使用缓存?,linq-to-sql,Linq To Sql,当我进行两次相同的查询时,第二次它不会从数据库返回新行,我猜它只是使用缓存 这是一个Windows窗体应用程序,我在应用程序启动时在其中创建dataContext 如何强制Linq to SQL不使用缓存 下面是一个示例函数,我遇到了问题: public IEnumerable<Orders> NewOrders() { return from order in dataContext.Orders where order.Status == 1

当我进行两次相同的查询时,第二次它不会从数据库返回新行,我猜它只是使用缓存

这是一个Windows窗体应用程序,我在应用程序启动时在其中创建dataContext

如何强制Linq to SQL不使用缓存

下面是一个示例函数,我遇到了问题:

public IEnumerable<Orders> NewOrders()
{
    return from order in dataContext.Orders
           where order.Status == 1
           select order; 
}

最简单的方法是使用一个新的DataContext——考虑到上下文提供给您的大部分内容是缓存和身份管理,听起来您只是想要一个新的上下文。为什么你只想创建一个,然后坚持它

顺便说一句,对于像您这样的简单查询,使用普通C和扩展方法比使用查询表达式更具可读性:

public IEnumerable<Orders> NewOrders()
{
    return dataContext.Orders.Where(order => order.Status == 1);
}

编辑:如果您从不希望它跟踪更改,则在执行任何操作之前将其设置为false。然而,这将严重限制它的实用性。你不能只是在两种语言之间进行查询后来回切换。在我看来,更改设计以避免使用单例上下文会更好。

无论您如何将对象添加到DataContext中,都会影响到它是否会包含在未来的查询中

不会将新的InventoryTransaction添加到将来的内存查询中

在本例中,我添加了一个ID为的对象,然后将其添加到上下文中

var transaction = new InventoryTransaction()
                 {
                     AdjustmentDate = currentTime,
                     QtyAdjustment = 5,
                     InventoryProductId = inventoryProductId
                 };

dbContext.InventoryTransactions.Add(transaction);
dbContext.SubmitChanges();
LINQtoSQL不够聪明,无法将其视为需要添加到InventoryTransactions中以前缓存的内存项列表中

将新的InventoryTransaction添加到未来的内存查询中

在创建关系时,尽可能使用Linq to SQL中的集合,而不是ID


除此之外,正如Jon所说,尽量减少DataContext的范围。

对于我来说,主要的重构是使用另一个DataContext,因为它被包装在一个框架库中。这基本上就是你需要做的。当面对一个之前做出的糟糕的设计决策时,我通常会发现卷起袖子修复它要比围绕着它工作要好得多,这样以后就越来越难修复了。嗯。。。这不是一个选项。我刚刚用另一个选项编辑了我的答案,但我仍然认为这几乎肯定是一个错误。LINQ to SQL的设计只是不适合您使用它的方式。对不起。。。这听起来有点刺耳。只是框架是为web开发的,我必须制作一个小的WinForm管理程序。如果我必须重构整个库,我有几天的工作和测试时间。我只是想知道为什么查询会被兑现,而没有强制重新查询的选项。
var transaction = new InventoryTransaction()
                 {
                     AdjustmentDate = currentTime,
                     QtyAdjustment = 5
                 };

inventoryProduct.InventoryTransactions.Add(transaction);
dbContext.SubmitChanges();