为什么我离开页面时数据库崩溃了?

时间:2012-05-20 20:35:46

标签: c# .net asp.net-mvc-3 sql-server-ce

每当我导航到某个特定页面然后离开它时,一些表格都会被删除。此页面与其他页面之间唯一不同的是此页面使用不同的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表仍然是唯一的表。哎呀!

1 个答案:

答案 0 :(得分:2)

听起来你有Code First;每次运行dbcontext时,它会检查配置为连接的数据库。如果模式不是它期望找到的模式,它会使数据库变平并根据该上下文使用的模型类重新创建表。

有很多途径可以解决这个问题。最简单的方法是组合您的上下文,或将每个上下文指向它自己独立的数据库。