0

私は最初にエンティティフレームワークコードを使用しており、データシードコードもあります

これで、アプリケーションを実行すると、データベースが生成されますが、ダミーデータがシードされません。すべてのデータを入力するには、EntityFrameworkをもう一度実行する必要があります。

データベースとデータを取得するためにアプリを2回実行する必要がないように、なぜ、どのように修正するのか考えてみてください。

thnx

私のコンテキスト定義ファイルは次のとおりです。

 public class Context : DbContext
    {
        public DbSet<Task> Tasks { get; set; }
        public DbSet<Agency> Agency { get; set; }

      protected override void OnModelCreating(DbModelBuilder modelBuilder)
     {
        base.OnModelCreating(modelBuilder);
     }
    }

そして、これが私のシードファイルです

public class Configuration : DbMigrationsConfiguration<Context>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = true;
        AutomaticMigrationDataLossAllowed = true;
    }

    protected override void Seed(Context context)
    {
        GenerateTasks(context);
        context.SaveChanges();
    }

    private static void GenerateTasks(Context context)
    {
        if (context.Task.Any()) return;
        context.Task.Add(new Task() { Name = "Received" });            
    }
}

そして、データベースを作成するためのフックは次のとおりです。

  Database.SetInitializer(new MigrateDatabaseToLatestVersion<Context, Configuration>());
  var context = new Context();
  context.Database.Initialize(true);
4

2 に答える 2

1

アプリがASP.NETであり、データ レイヤーとは別のアセンブリである場合は、初期化を構成する代わりに、web.config で直接構成できます。多分これがあなたの問題の理由です。

したがって、ASP.NET アプリの場合は、次のことを試すことができます。

(1)

これをコメントアウトします:

Database.SetInitializer(new MigrateDatabaseToLatestVersion<Context, Configuration>());
var context = new Context();
context.Database.Initialize(true);

(2)

web.config で、これを最後の/configurationタグの前に挿入します。

<entityFramework>
<contexts>
  <context type="**fully-qualified name of your context class**,
                 **assembly name of your context**">
    <databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion`2[[**fully-qualified name of your context class**, **assembly name of your context**],
                               [**fully-qualified configuration type**, **assembly name of your context**, Version=1.0.0.0, Culture=neutral]], EntityFramework"/>
  </context>
</contexts>

ここで、完全修飾構成タイプは、移行構成を持つクラスです ([...]Context.Migrations.Configuration のようなもの)

私は自分のプロジェクトでこの構成アプローチを使用していますが、うまく機能しています!

于 2012-05-30T18:27:01.363 に答える
0

それは本当だ。呼び出すcontext.Tasks.Find(1)と、データベースにヒットします。EF コード ファーストは、このトリックを使用してすべてを延期します。この方法では、アプリケーションの起動時間が大幅に短縮されます。(でも実際は違います!)

于 2012-05-29T15:38:10.180 に答える