2017-02-10 15 views
1

Entity Frameworkが、接続先のデータベースを上書きしたり、作成しようとすることはありません。これは以前ASPウェブサイト(視覚的な基本的なスクリプトの味)によってアクセスされた確立されたデータベースです。私はEntity Frameworkの初期化のベストプラクティス

//example 1  
public class SchoolDBContext: DbContext 
{ 
    public SchoolDBContext() : base("name=SchoolDBConnectionString") 
    { 
    } 
} 

あなたがそうのような基本コンストラクタに「名前を=」合格大会を...見てきましたが、私はので、おそらく、それはハードコードされた(上記のように)持っていないように好むだろう...

//example 2 
public SchoolDBContext(string ConnectionString) : base("name=" + ConnectionString) { 
} 

しかし、私はまた、文字列が空で出た場合、バグにできるようにしたいのですが...

//example 3 
public SchoolDBContext(string ConnectionString) : { 
    if (string.IsNullOrWhitespace(ConnectionString) throw Exception("empty connection string"); 
    base("name=" + ConnectionString);   
} 

質問1:コードの第3ビットが同じでない場合、私はわかりませんよ2番目の仕事は、それですか? 3番目の例では、 "name ="のベースを呼び出す前にパラメータのない構造体を最初に呼び出すことがあります。

質問2:EntityFrameworkをより堅牢に構成するために使用できるオプションがコンストラクタで利用できますか?

あなたはEFはあなたがcreateinitializerクラスを追加する必要があるたびに上書きOCH新しいデータベースを作成したくない場合は、私はEF 6

答えて

1

を使用しています。

public class CreateInitializer : CreateDatabaseIfNotExists<SchoolDBContext>{} 
+0

http://www.entityframeworktutorial.net/code-first/database-initialization-strategy-in-code- first.aspx ... CreateDatabaseIfNotExists:これはデフォルトの初期化子です。名前が示すように、構成ごとにデータベースが存在しない場合、データベースを作成します。ただし、モデルクラスを変更してこの初期化子を使用してアプリケーションを実行すると、例外がスローされます。 – Nnoel

+0

"CreateIntializer"をグーグルで検索して私の答えを見つけたので、これを正しくマークしています。ありがとう。 – Nnoel

1

質問1:

イムないように注意してくださいどちらか。私は、例のようなものは見たことがないことを認めなければなりません。あなたのドキュメントのソース、またはそのアイディアを思いついた方法を教えてもらえますか?


質問2: あなたが独立のコンストラクタをwan't場合は、これをどのようにしてみてくださいについては?

public SchoolDBContext() 
     : base(ConnectionString == null ? "name=SchoolDBConnectionString" : WhateverYouDoIfItsWrong) 
    { 
     // Your code here! Lucky you 
    } 
+0

http://www.entityframeworktutorial.net/code-first/database-initialization-in-code-first.aspx – Nnoel

+1

@Nnoelああ大丈夫です。まあ、私のコードはあなたの例と同じですが...私はよりスムーズに言うでしょう。 – Cataklysim

+0

私もこれを使用しています。 +1 – Nnoel

1

DbMigrationsConfigurationをご覧ください。

クラスから継承し、AutomaticMigrationsEnabledをfalseに設定する新しいクラスSchoolDbContextConfiguration-classを作成できます。次のように

internal sealed class Configuration : DbMigrationsConfiguration<SchoolDBContext> 
{ 
    public Configuration() 
    { 
     AutomaticMigrationsEnabled = false; 
    } 
} 

そして、あなたのSchoolDbContextでは、初期化します。

public SchoolDBContext(string ConnectionString) : base("name=" + ConnectionString) { 
var init = new MigrateDatabaseToLatestVersion<SchoolDBContext, SchoolDbContextConfiguration>(true); 
     Database.SetInitializer(init); 

}

+0

面白い答えをありがとう。 +1 – Nnoel

関連する問題