奇怪的缓存问题 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
实例。
我首先使用 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
实例。