none
关于SqlCacheDependency缓存机制的使用疑问 RRS feed

  • 问题

  • 这几天在调试依赖缓存的使用,试了两种方式:

    1,轮询方式

                 using (BASEEntities db = new BASEEntities())
                {
                    //如果没有缓存 重新获取数据
                    var links = db.Promotions.AsQueryable();
                    //添加到缓存中
                    HttpRuntime.Cache.Insert(
                        "Link",
                        links,
                        new SqlCacheDependency("DEV_BASE", "Promotions")
                        );
                    //返回数据
                    list = links.ToList();
                }

    2,通知方式

                DataTable dtPromotions = HttpRuntime.Cache["dtPromotions"] as DataTable;

                if (dtPromotions == null)
                {
                    Response.Write("no cache <br />");
                    using (SqlConnection sqlCon = new SqlConnection(CONNSTR))
                    {
                        sqlCon.Open();
                        SqlCommand sqlCmd = new SqlCommand();
                        sqlCmd.Connection = sqlCon;
                        sqlCmd.CommandText = "select employeeno, employeename from dbo.Promotions";
                        dtPromotions = new DataTable();
                        SqlCacheDependency scd = new SqlCacheDependency(sqlCmd);
                        SqlDataAdapter sda = new SqlDataAdapter(sqlCmd);
                        sda.Fill(dtPromotions);
                        HttpRuntime.Cache.Insert("dtPromotions", dtPromotions, scd);
                        sqlCon.Close();
                    }

                }
                else
                {
                    Response.Write("read cache <br />");
                }

    两种方式都调试成功了。但想在通知方式中,使用EF 实体架构来实现,碰到了瓶颈。难道EF只能使用轮询方式吗?求解


    • 已编辑 Sam-'''- 2017年11月28日 11:31 完善
    2017年11月28日 11:30

全部回复

  • 你好,

    据我所知,如果你需要使用EF实体架构来实现依赖缓存的话, 你需要先是使用LINQ和EF来生成一个ObjectQuery然后使用ToTraceString 方法来转换成sql query来调用依赖缓存。

    具体如何实现,你可以参照如下项目例子:

    https://code.msdn.microsoft.com/How-to-use-SqlDependency-5c0da0b3/view/SourceCode#content


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年11月30日 6:27
  • 谢谢你的回复,我研究看看。
    2017年11月30日 7:41