具有实体框架4的缓存表

时间:2012-04-04 22:45:48

标签: c# entity-framework entity-framework-4

我有一个包含很多行的表是产品表,当用户搜索网站时,我从这个表中选择,我也在select中使用Include方法,我使用了profiler,我注意到了EF生成一个包含大量内连接,左连接等的查询。

我想要做的是使用这个select查询并将结果插入到同一数据库中的临时缓存表中,然后我可以创建一个服务来每隔x分钟更新一次该表。

问题是,如何让EF使用这个缓存表来选择行,这样我就可以选择*而不是每次查询带有连接的products表?

谢谢!

1 个答案:

答案 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有所帮助,但它涉及更多。