我有一个有很多行的表,这是products表,当用户搜索网站时,我从这个表中进行选择,我还在select中使用Include方法,我使用profiler,我注意到EF生成了一个带有许多内连接、左连接等的查询。
我想要做的是使用这个select查询并将结果插入到同一数据库的一个临时缓存表中,然后我可以创建一个服务来每x分钟更新一次这个表。
问题是,如何让EF使用这个缓存表来选择行,这样我就可以只执行一次select *操作,而不是每次使用连接查询products表时都执行select *操作?
谢谢!
发布于 2012-04-05 07:14:11
我非常确定EF没有临时表支持--至少是开箱即用的--但它在不断变化。
你最好的选择就是做这样的事情。
dbcontext.Database.ExecuteSqlCommand("...")我猜你可以运行一个任意的...and (我知道大多数东西都可以传入,但是我不确定有什么限制,但是你可以运行一个SP,创建索引等等)-来建立一个临时表。
那么下一步就是做相反的事情,就像这样。
dbcontext.MyTable.SqlQuery("...").ToList()...to将sql结果映射回您的某个实体-或者对于未映射的实体映射回字符串或其他内容。(dbcontext.MyTable.SqlQuery<T>("...").ToList())
问题是如何准确地做到这一点--真的不确定你的具体细节。但是您可以事先创建一个临时表,并将其映射-并将其用于临时目的。
基本上,这只是一种数据库管理员的想法--但是EF对于这样的事情并不完美(参见这里的Recommed usage of temp table or table variable in Entity Framework 4. Update Performance Entity framework),但是您可能可以使用像上面这样的自定义ran查询。
希望能有所帮助
编辑:这也可能对from EF forums有帮助,但它更复杂。
https://stackoverflow.com/questions/10020330
复制相似问题