具有实体框架 4 的缓存表

本文关键字:缓存 框架 实体 | 更新日期: 2023-09-27 18:30:16

我有一个包含大量行的表,即产品表,当用户搜索网站时,我从此表中进行选择,并且我还在选择中使用 Include 方法,我使用探查器,我注意到 EF 生成了一个包含大量内部联接、左联接等的查询。

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

问题是,如何使 EF 使用此缓存表来选择行,以便我可以只选择 *,而不是每次使用联接查询产品表时?

谢谢!

具有实体框架 4 的缓存表

我很

确定 EF 没有临时表支持 - 至少开箱即用 - 但它在不断变化。

你最好的选择是做这样的事情...

dbcontext.Database.ExecuteSqlCommand("...")

。我猜你可以在那里运行一个任意的SQL(我知道大多数东西都可以传入,但我不确定限制,但你可以运行SP,创建索引等) - 设置一个临时表。

然后下一步就是做这样的事情。

dbcontext.MyTable.SqlQuery("...").ToList()

。将 SQL 结果映射回您的某个实体 - 或者将非映射实体映射到字符串或其他内容。( dbcontext.MyTable.SqlQuery<T>("...").ToList()

问题是如何准确地做到这一点 - 真的不确定你的具体情况。但是您可以事先创建一个临时表并对其进行映射 - 并将其用于临时目的。

基本上,这是 DBA 的想法 - 但 EF 并不适合此类事情(请参阅此处类似的内容 推荐实体框架 4 中临时表或表变量的用法。更新性能实体框架),但你可能可以使用上述自定义运行查询。

希望对您有所帮助

编辑:这也可能有助于EF论坛,但它更具参与性。