0

每当我导航到特定页面然后离开它时,都会删除一些表。此页面与其余页面之间唯一不同的是此页面使用不同的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);
    }
}

更新: 我刚刚意识到我有另一个页面可以访问这两个DbContexts。出于某种原因,我可以导航到此页面,然后离开而不删除表。只是这一页删除了其他上下文的所有表。

更新: 当我将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表仍然是唯一的表。啊!

4

1 回答 1

2

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

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

于 2012-05-21T01:06:01.513 回答