【问题标题】:Cache table with Entity Framework 4使用 Entity Framework 4 缓存表
【发布时间】:2012-04-04 22:45:47
【问题描述】:

我有一个包含很多行的表 products 表,当用户搜索网站时,我从该表中进行选择,并且我还在选择中使用了 Include 方法,我使用了分析器,我注意到EF 生成一个包含大量内连接、左连接等的查询。

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

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

谢谢!

【问题讨论】:

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


    【解决方案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 有所帮助,但它的参与度更高。

    【讨论】:

    • 感谢 NSGaga!主要问题是关于其他列名......但我想我最终会自己创建某种映射......谢谢!
    • 又添加了一个链接——对于我一年前的更大 Db,我不得不使用自定义 ORM 来获得我需要的东西——但 EF 现在的状态要好得多,更稳定,经过测试等等。跨度>
    • 如果您发现这回答了您的部分/大部分问题,请考虑将其标记为答案。对于其他人,或者如果需要,编辑问题以说明当前状态、已回答的内容和缺少的内容。谢谢
    猜你喜欢
    • 1970-01-01
    • 2011-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多