9

質問の言い回しが不十分だったかもしれませんが、global.asxファイルで使用しています

 if (System.Diagnostics.Debugger.IsAttached)
        {
            var test = new TestDbSeeder(App_Start.NinjectWebCommon.UcxDbContext);
            test.seed();
       }

これは、デバッガーが接続されているかどうかを確認し、テストシーダーを実行して、受け入れテストが常に合格するようにします。

データベースも存在するかどうかを確認する必要があります。存在しない場合は、最初にこのコードを実行します。

  var test2 = new DataSeeder();
  test2.Seed(App_Start.NinjectWebCommon.UcxDbContext);

このデータシーダーは、常にデータベースに存在する必要がある実際のデータです。そのコードブロックを実行できるように、データベースが存在するかどうかを確認するコマンドはありますか。ありがとう!

4

2 に答える 2

22

Database.Existsメソッドは機能しますか?

if (!dbContext.Database.Exists())
    dbContext.Database.Create();

コメントに答えるために#1を編集する

public class DatabaseBootstrapper
{
    private readonly MyContext context;

    public DatabaseBootstrapper(MyContext context)
    {
        this.context = context;
    }

    public void Configure()
    {
        if (context.Database.Exists())
            return;

        context.Database.Create();
        var seeder = new Seeder(context);
        seeder.SeedDatabase();
    }
}

それはまさにあなたが望むことをするはずです。global.asaxファイルで...

public void Application_Start()
{
    var context = ...; // get your context somehow.
    new DatabaseBootstrapper(context).Configure();
}
于 2012-11-02T16:03:18.557 に答える
2

Entity Framework Coreでは、次のように機能します。

namespace Database
{
    using Microsoft.EntityFrameworkCore.Infrastructure;
    using Microsoft.EntityFrameworkCore.Storage;

    public partial class MyContextClass
    {
        /// <summary>
        /// Checks if database exists
        /// </summary>
        /// <returns></returns>
        public bool Exists()
        {
            return (this.Database.GetService<IDatabaseCreator>() as RelationalDatabaseCreator).Exists();
        }
    }
}

クラス名がデータベースのコンテキストクラス名と同じであり、同じ名前空間にあることを確認してください。

次のように使用します。

var dbExists = (MyContextClass)db.Exists()

出典:StackOverflow Answer

于 2020-03-24T20:11:46.653 に答える