我有一个包含很多行的表,即产品表,当用户搜索网站时,我从该表中进行选择,并且我还在选择中使用了 Include 方法,我使用了分析器,我注意到 EF 生成了一个具有大量内连接、左连接等的查询。
我想要做的是使用这个选择查询并将结果插入到同一个数据库中的一个临时缓存表中,然后我可以创建一个服务来每 x 分钟更新一次这个表。
问题是,我如何让 EF 使用这个缓存表来选择行,这样我就可以只做一个 select * 而不是每次都用连接查询 products 表?
谢谢!
我有一个包含很多行的表,即产品表,当用户搜索网站时,我从该表中进行选择,并且我还在选择中使用了 Include 方法,我使用了分析器,我注意到 EF 生成了一个具有大量内连接、左连接等的查询。
我想要做的是使用这个选择查询并将结果插入到同一个数据库中的一个临时缓存表中,然后我可以创建一个服务来每 x 分钟更新一次这个表。
问题是,我如何让 EF 使用这个缓存表来选择行,这样我就可以只做一个 select * 而不是每次都用连接查询 products 表?
谢谢!
我很确定 EF 不支持临时表 - 至少是开箱即用的 - 但它在不断变化。
你最好的选择是做这样的事情......
dbcontext.Database.ExecuteSqlCommand("...")
...我猜你可以在那里运行任意 SQL(我知道大多数东西都可以传入,但我不确定限制,但你可以运行 SP、创建索引等) - 设置一个临时表。
然后下一步就是做这样的相反的事情..
dbcontext.MyTable.SqlQuery("...").ToList()
...将 sql 结果映射回您的某个实体 - 或将未映射的实体映射到字符串或其他东西。( dbcontext.MyTable.SqlQuery<T>("...").ToList()
)
问题是如何准确地做到这一点 - 不确定你的具体情况。但是您可以事先创建一个临时表并将其映射 - 并将其用于临时目的。
基本上,这是 DBA 的想法 - 但 EF 并不适合此类事情(请参阅此处类似的东西Recommed usage of temp table or table variable in Entity Framework 4. Update Performance Entity framework),但您可能会接受自定义运行查询,例如以上。
希望能帮助到你
编辑:这也可能对EF 论坛有所帮助,但它更具参与性。