1

まず、エンティティフレームワークコードを使用しようとしています。 今すぐサンプルデータをデータベースに入力したいと考えています。DropCrateDatabaseシードメソッドが呼び出されない

public class SampleData:DropCreateDatabaseAlways<MyContext> 
{ 
    protected override void Seed(MyContext context) 
    { 
     var products = new List<Product> 
     { 
      new Product{Name="prod1"}, 
      new Product{Name="prod2"} 
     }; 

     products.ForEach(i => context.Products.Add(i)); 
    } 
} 

あるMyContextクラス:

public class MyContext:DbContext 
{ 
    public MyContext():base("MyCon") 
    { 
     this.Configuration.LazyLoadingEnabled = true; 
    } 

    public DbSet<Product> Products { get; set; } 
} 

たっ文字列クラス: はここに私のSampleDataClassある

<connectionStrings> 
    <add name="MyCon" connectionString="Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=DatabaseName;Integrated Security=True;" providerName="System.Data.SqlClient" /> 
    </connectionStrings> 

そして私はApplication_Startメソッドで初期化子を設定します。

protected void Application_Start() 
    { 
     Database.SetInitializer(new Models.SampleData()); 

     AreaRegistration.RegisterAllAreas(); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
    } 

しかし何も起こらない。 問題は何ですか?

+0

コンテキストを初期化し、 'DbSet'にアクセスする必要があります。アクションメソッドで。それはデータベースが作成されるときです。 –

答えて

1

NOTE

以下のコードは、ドロップするEFを指示し、それが必要と認めるときにデータベースを再作成します。これは非常に破壊的です!あなたのようなあなたのApplication_start()呼び出すべきものではDropCreateDatabaseIfModelChanges値だけでなく、これを防止するための設定の初期化(2次の行を設定初期化されている)

AutomaticMigrationsEnabled = true; 
AutomaticMigrationDataLossAllowed = true; 

END注

を変更する必要がありますConfigurationが定義suコマンドを持っているMigrations\Configuration.csで宣言されたクラスであることと、この

Database.SetInitializer(new DropCreateDatabaseIfModelChanges<MyContext>()); 

using (var context = new MyContext()) 
{ 
    new MigrateDatabaseToLatestVersion<MyContext, Configuration>().InitializeDatabase(context); 
} 

ch

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

    protected override void Seed(FoyerRural.Models.Contexts.Context context) 
    { 
    // Database code 
    } 
} 

Configuration.csファイルを生成することができます。これを行うには、this tutorialをフォローすることができます。

TLDR; Tools --> NuGet Package Manager --> Package Manager Consoleを実行してEnable-Migrationsを実行してください)

+0

ありがとうございました。私はalredy別のプロジェクトでこれを行う。私はexvely私は何を覚えていないが、私はそこで有効に移行を使用していないと確信しています。 しかし、それはうまくいきます。 – Gleb

+0

ええ、私のプロジェクトの例を使ったので、あなたの質問にちゃんと答える余分なコードがあるので、このコードは動作すると確信していますが、私は他のセットアップをテストしませんでした...だから私はあなたに:-)よりもテストしてもらいたい – Wndrr

関連する問題