2016-04-22 9 views
2

コードの最初のデータベースでプロジェクトを開始しましたが、今は本番データベースのコピーに切り替えて、テスト環境を本番環境のように見せるようにしました。したがって、私はEFがテーブルを作成することを望んでいません(すでに存在しています)。そして、テーブルを削除したくないと確信しています。Entity Frameworkはデータベースを削除したいのですが、なぜですか?

だから、私は私のGlobal.asax.csのApplication_Start()の先頭にこれを追加しました:

Database.SetInitializer<ProjectContext>(null); 

しかし、私はまだというエラーメッセージが表示されます:

「削除できません。データベース 'master'はシステムデータベースであるためです。

nullで初期化した後でドロップを試してやろうとは思わなかったのですか?私のコントローラで

は、私は次のようにします。

var userclientobjectvalues = context.UserClientObjectValues; 
var projects = context.Projects; 
var users = context.Users; 
var objectvalues = context.ObjectValues; 
var userProjects = userclientobjectvalues.Where(v => v.user_id == user); 

最初の4行は、ちょうど私が正しくデータを収集していますことを確認します。また、デバッグモードでは、結果ビューはすべてのデータで正しく展開されます。

上記クラッシュは、上記のコードブロックの最後の行で発生します。 Global.asax.csから

protected void Application_Start() 
     { 
      Database.SetInitializer(new NullDatabaseInitializer<ProjectContext>()); 
      AreaRegistration.RegisterAllAreas(); 
      FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
      RouteConfig.RegisterRoutes(RouteTable.Routes); 
      BundleConfig.RegisterBundles(BundleTable.Bundles); 
     } 
+0

'Application_Start()'で何か他のことをしていますか?何らかの理由で 'ProjectContext'にアクセスしようとするものは何ですか? – Jcl

+0

あなたはDatabase.Log = s => Debug.WriteLine(s)から意味のあるものを得ますか? ? –

+0

簡単なテスト:デバッグ時に、 'Database.SetInitializer'行にブレークポイントを設定すると、エラーが出る前にヒットしますか? – Jcl

答えて

1

コメントでいじっていくつかの前後の後、初期化子がしなければならなかったので、コンテキストは、web.config(代わりのコード上)で定義されたようですそこにも置かれるべきです。エラーは、それがmasterを落とすことができなかったということでしたので、

<context type="MyProject.MyContext, MyAssembly"> 
    <databaseInitializer type="MyProject.MyDbInitializer, MyAssembly"> 
    <parameters> 
     <parameter value="MyConstructorParameters" /> 
    </parameters> 
    </databaseInitializer> 
</context>  

<context type="MyProject.MyContext, MyAssembly" disableDatabaseInitialization="true" /> 

それとも、別の初期化子をしたい場合は、あなたが行うことができます:

だから、コンテキストラインにdisableDatabaseInitialization="true"を設定しましたまた、接続文字列をダブルチェックして、Initial Catalogプロパティを持っていることを確認してください。コード先頭のコンテキストは、少なくともmasterデータベース(少なくともSQL Serverの場合)では使用できません。

関連する問題