我有一个包含很多行的表是产品表,当用户搜索网站时,我从这个表中选择,我也在select中使用Include方法,我使用了profiler,我注意到了EF生成一个包含大量内连接,左连接等的查询。
我想要做的是使用这个select查询并将结果插入到同一数据库中的临时缓存表中,然后我可以创建一个服务来每隔x分钟更新一次该表。
问题是,如何让EF使用这个缓存表来选择行,这样我就可以选择*而不是每次查询带有连接的products表?
谢谢!
答案 0 :(得分:1)
我很确定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)但你可能对上面的自定义运行查询没问题。
希望有所帮助
编辑:这也可能对from EF forums有所帮助,但它涉及更多。