SQLite内存数据库渴望加载实体

时间:2017-06-14 15:32:41

标签: c# .net entity-framework sqlite

我已经将测试转换为在数据库文件上使用SQLite :memory:数据库,以加快测试速度。除了一个警告之外,一切都进展顺利:它会自动急切地在实体上加载导航属性。

如果我运行项目并使用Postman使用实际数据库文件命中它,它不会急切地加载它们,并且只有在我指定我希望它们使用.Include()时才加载导航属性。

在切换到SQLite内存数据库进行测试之前,它没有这样做。

DbContext配置如下:

        Configuration.LazyLoadingEnabled = true;
        Configuration.ProxyCreationEnabled = false;
        Configuration.ValidateOnSaveEnabled = true;

之前有没有人遇到过这个问题?

1 个答案:

答案 0 :(得分:1)

这是一篇很老的帖子,但我想我会为遇到这个问题的其他人提供答案。

这里可能发生的事情只是您的DbContext在其ChangeTracker中缓存了实体。无论底层提供程序如何,当您将实体插入数据库时​​,Entity Framework都会跟踪该实体。如果查询刚刚插入的实体,Entity Framework会假定实体不会更改,因此会从ChangeTracker返回实体。如果您更改了查询以执行_myDbContext.Set<SomeEntity>().AsNoTracking().ToList(),那么您应该会发现它执行查询并且仅预取您指定的相关实体。