2016-03-29 4 views
1

私はパッケージマネージャコンソールで次のコードを実行した場合:別に私はテーブルの全てを清浄化したことも考えられ、テーブルにいくつかのデフォルトのデータを走る種子法からエンティティFramworkコードファーストの移行

-Update-Database -Force 

を前に、これは間違っているようだ!

EDIT:

私はまだ私は-update-データベース-forceを実行すると、データベース内のテーブルはdropedされていない理由、それは奇妙な、彼らはそれを行うべきではありません見つけますか?そして、なぜ、Seedメソッドで追加されたデータが-update-databaseを実行するたびにデータを追加し続けるのでしょうか?もう一度、prevoiusが追加したデータを上書きしてはいけませんか?私はASP.NETからこのリンクを他のソースに下のテキストを読むとき、それは新しいデータと古いデータまたはテーブルを落とす必要がありますと種を付けることが可能であるように思える!私はこれを忘れてしまったのですか?何か間違っていますか?

You have configured the Entity Framework to automatically drop and 
re-create the database each time you change the data model. When you 
add, remove, or change entity classes or change your DbContext class, 
the next time you run the application it automatically deletes your 
existing database, creates a new one that matches the model, and seeds 
it with test data. 
+0

データベースを削除すると、イニシャライザが新しいものを作成するように設定されているはずです – Ortund

+0

@Ortund私はASP.NET MVCを初めて使用していましたが、以前のプロジェクトでは研究中にDBを削除してからいくつかのコマンドやVisual Studioによって作成されましたが、間違っている可能性がありますか?イニシャライザの意味は? –

+0

答えで説明しますが、動作しないと受け入れる必要はありません。 – Ortund

答えて

2

Entity Frameworkのコードファーストは、あなたのMVCプロジェクトを削除し、それがDatabase Initializersを使用することにより、実行時にデータベースを再作成することができます使用します。

//Global.asax.cs 
    protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 
     GlobalConfiguration.Configure(WebApiConfig.Register); 
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
     BundleConfig.RegisterBundles(BundleTable.Bundles); 

     // instanciate your DbContext class 
     OrtundEntities db = new OrtundEntities(); 
     db.Database.Initialize(true); // this calls your chosen initializer 
     db.Seed(); 
    } 

// OrtundEntities 
    public OrtundEntities() 
     : base("DefaultConnection") 
    { 
     Database.SetInitializer<OrtundEntities>(DropCreateDatabaseAlways); 
    } 

あなたは(唯一のユーザー訪問、それだけでなくので、テストにDropCreateDatabaseAlwaysを使用するたびに、私は信じて)MVCのウェブサイトを実行するとき、これは常にデータベースをドロップして作成します。

また、1つまたは2つのテーブルを空にしたい場合、次の操作はコントローラでうまくいくでしょう。これには、他のすべてのデータをそのまま残し、空のテーブルだけを空にするという利点があります。

public JsonResult ClearAll() 
    { 
     try 
     { 
      // clears the Receipts and Rewards tables 
      db.Database.ExecuteSqlCommand("truncate table Receipts"); 
      db.Database.ExecuteSqlCommand("truncate table Rewards"); 

      return Json(true, JsonRequestBehavior.AllowGet); 
     } 
     catch (Exception ex) 
     { 
      return Json(ex.Message, JsonRequestBehavior.AllowGet); 
     } 
    } 

EDIT

私はあなたが上記の機能を切り捨てるテーブルが他のテーブルは、それらのテーブルへのクエリはおそらくエラーを引き起こすしようとしているに依存していることをリレーショナル・データを持っている場合は、その言及を忘れてしまいました。

+0

答えをありがとう!後でコードを試してみる –

関連する問題