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);
    }
}

更新: 両方にアクセスする別のページがあることに気付きましたDbContext。何らかの理由で、このページに移動して、テーブルを削除せずに終了できます。他のコンテキストのすべてのテーブルを削除するのは、この 1 つのページだけです。

更新: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 に答える