每当我导航到某个特定页面然后离开它时,一些表格都会被删除。此页面与其他页面之间唯一不同的是此页面使用不同的DbContext
。删除的表格也是访问页面上未使用的其他DbContext
的一部分。这真的让我有任何建议吗?
崩溃页面的控制器是。
public class GenerationController : Controller
{
private GenerationDbContext GenerationDb = new GenerationDbContext();
private string generatedDir = "~/App_Data/Generated";
//
// GET: /Generation/
public ViewResult Index()
{
var viewModel = new GenerationIndexViewModel
{
Generations = GenerationDb.Generations
.OrderByDescending(g => g.GeneratedOn)
.ToList()
};
return View(viewModel);
}
protected override void Dispose(bool disposing)
{
GenerationDb.Dispose();
base.Dispose(disposing);
}
}
更新:我刚刚意识到我有另一个页面可以访问DbContext
。出于某种原因,我可以导航到此页面,然后离开而不删除表格。正是这一页删除了其他上下文的所有表。
更新:当我将Index
操作更改为。
public ActionResult Index()
{
return Content("Hello.");
}
我可以在页面和所有其他页面之间导航。没有关于要删除的表的错误。因此,我很肯定它必须对模型或数据库上下文做些什么。是这样的。
public class Generation
{
public int Id { get; set; }
[Required]
public DateTime GeneratedOn { get; set; }
[Required, StringLength(4000)]
public string Name { get; set; }
}
public class GenerationDbContext : DbContext
{
public DbSet<Generation> Generations { get; set; }
}
更新:使用随VWD提供的数据库浏览器,当我导航到该页面时,有Generations
表。当我导航到另一个使用不同数据库上下文的页面时,Generations
表仍然是唯一的表。哎呀!
答案 0 :(得分:2)
听起来你有Code First;每次运行dbcontext时,它会检查配置为连接的数据库。如果模式不是它期望找到的模式,它会使数据库变平并根据该上下文使用的模型类重新创建表。
有很多途径可以解决这个问题。最简单的方法是组合您的上下文,或将每个上下文指向它自己独立的数据库。