web-dev-qa-db-ja.com

Entity Frameworkによるデータベースの変更を停止する

エンティティフレームワークへのコードファーストアプローチを試し始めています。主に、ビューに表示するためにプロパティを注釈で装飾できるようにします(そうでない場合は、現在のところ、エンティティフレームワークが生成したアノテーションを追加して、オブジェクト間でデータをコピーできるようにします。

現在、アプリケーションを起動すると、データベースを作成しようとしているように見えます。

エンティティフレームワークにeverデータベースを変更させたくありません。いいえ。試さないでください。データベースを変更するのはそれほど難しいことではありません。自分でやった方がずっと気持ちがいいです。データベースを設計するときに手を握るフレームワークは必要ありません。

データベースを変更しようとするのをやめるようにフレームワークに指示できますか?データベースを変更しようとしているという事実はかなり恐ろしいので、私は今コードファーストを使用することを非常にためらっています。開発中でさえ、私はそれが起こるのを見たくありません。

私は運が悪いですか?

38

EFでデータベースを作成したくない場合は、データベース初期化子を無効にできます。

public class SchoolDBContext: DbContext 
{
    public SchoolDBContext() : base("SchoolDBConnectionString")
    {            
        //Disable initializer
        Database.SetInitializer<SchoolDBContext>(null);
    }
    public DbSet<Student> Students { get; set; }
    public DbSet<Standard> Standards { get; set; }
}

http://www.entityframeworktutorial.net/code-first/turn-off-database-initialization-in-code-first.aspx を参照してください

60
jrummell

EFを使用したいが、データベースは変更しない場合は、おそらく最初にコードは必要ありません。あなたはおそらく最初にデータベースのようなものを望みます。

http://blogs.msdn.com/b/adonet/archive/2011/03/15/ef-4-1-model-amp-database-first-walkthrough.aspx

回答コメントからのリンク:
http://automapper.codeplex.com/
AutoMapper入門

編集:私は目標を誤解しました 次の正しいコードが与えられたこの回答を参照する必要があります:

EFでデータベースを作成したくない場合は、データベース初期化子を無効にできます

Database.SetInitializer<MyContext>(null);
4
sclarson

イニシャライザであることを宣言するときは、基本クラスを使用します。

public class DatabaseInitialiser : CreateDatabaseIfNotExists<MyContext>

のではなく :

public class DatabaseInitialiser : RecreateDatabaseIfModelChanges<MyContext>

または使用する場合:

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

これを次のように置き換えます:

Database.SetInitializer<MyContext>(new CreateDatabaseIfNotExists<MyContext>);
2
Lloyd Powell

コードが最初 はあなたが説明することをほぼ正確に行うので、私はあなたの質問を理解していません。

EFでデータベースをいじりたくない場合は、既存のデータベースから モデルを生成 を使用します。

1
CodeCaster