奇怪的缓存问题 EF Code First Application SQL Server 2014

Weird Caching Issue EF Code First Application SQL Server 2014

我首先使用 EF 代码在 .Net MVC 中开发一个基本的 CRUD 应用程序。

我遇到了一个以前从未真正遇到过的问题。

基本上我对数据库后端所做的任何更改都不会反映在应用程序中,除非我在服务器上重新启动网站或重新部署应用程序。

我有另一个正在开发的应用程序,它有完全相同的问题。

我使用该应用所做的任何更改都没有问题,但对 SQL 后端的任何手动更新都无法通过。

我很确定它不是在客户端我已经进行了一次硬刷新,手动清除了我所有的浏览数据并在我的浏览器上安装了缓存杀手。

我有什么想法可以开始调试这个问题吗?

谢谢

这是我的数据库上下文文件的样子:

 public partial class MyContext: DbContext
    {

        public MyContext() : base("name=MyContext")
        {

        }

        public DbSet<MyDbSet> MyDbsets { get; set; }
        etc...


        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        }
    }

我在我的 MVC 层中使用 unity 调用它:

 private static IUnityContainer BuildUnityContainer()
        {
            var container = new UnityContainer();

            // register all your components with the container here
            // it is NOT necessary to register your controllers

            // e.g. container.RegisterType<ITestService, TestService>(); 

            // repos
            ...my repos

            // service
           ... my serives


            container.RegisterType<MyContext>(new HierarchicalLifetimeManager());

            RegisterTypes(container);

            return container;
        }

我已经用这种方式设置了几十个应用程序,但从来没有遇到过这个问题。也不明白反对票。这是一个真正的问题

使用 HierarchicalLifetimeManager 意味着 context 实例 returned 具有与容器相同的生命周期(每个会话)。如果您始终在每个会话中使用相同的容器实例,您将继续重复使用相同的 context 实例,这是不推荐的。您应该始终为每个 "logical unit of work" 创建一个新的 context 实例,然后将其处理掉。具有长生命周期的上下文会表现出非常奇怪的行为(通常表现为"caching")和低性能。

PerRequestLifetimeManager 将在您每次请求时 return 一个 context 的新实例,这将负责一遍又一遍地重复使用相同的 context 实例。