2016-04-30 8 views
2

ライブラリを管理するための単純なMVCアプリケーションを構築しています。開発目的のために、私はEFにモデルを変更するたびにデータベースをドロップして再作成し、いくつかのサンプルデータを入力するようにしたいと思います。この瞬間、私はイニシャライザを動作させるのに苦労します。初期化子クラスは、次のようになります。カスタムデータベース初期化ツールを使用できません

public class LibraryInitializer : DropCreateDatabaseIfModelChanges<LibraryContext> 
{ 
    protected override void Seed(LibraryContext context) 
    { 
     // sample data to be writted to the DB 
    } 
} 

とコンテキスト・クラスは次のようになります。この時点で

public class LibraryContext : DbContext 
{ 
    public DbSet<User> Users { get; set; } 
    public DbSet<Book> Books { get; set; } 

    public LibraryContext() 
    { 
     Database.SetInitializer<LibraryContext>(new LibraryInitializer()); 
    } 
} 

私は次のエラーを取得する:

利用できる多くのガイドに基づいて

Member 'Database.SetInitializer(IDatabaseInitializer)' cannot be accessed with an instance reference; qualify it with a type name instead

Web上では、これがイニシャライザを使用する方法ですが、なぜこのエラーが発生するのかわかりません。 どんな助けも大いにアピールされます。 ありがとうございました!

答えて

9

C#にあるインスタンスからstaticにアクセスすることはできません。タイプの名前を使用してstaticメンバーにアクセスする必要があります。フルタイプの名前を使用してください。

System.Data.Entity.Database.SetInitializer<LibraryContext>(new LibraryInitializer()); 

DbContextSystem.Data.Entity.DatabaseクラスのインスタンスであるDatabase性質を有しています。 DbContextDatabaseと書き込むと、それはそのインスタンスを指します。インスタンスから静的メソッドにアクセスすることはできないため、エラーが発生します。

+0

答えをありがとう、それは問題をかなり解決しました。さて、初期化子のビルド方法を説明するチュートリアルやブログ記事をチェックすると(特定のWebサイトを指し示したくない)、実際には 'System.Data.Entity.Database.SetInitializer .. '名前。それは私のコードでそれを使用するように強制するものか、それともどこにも言及されていない "誰もがそれを知っているべきである"ということですか? – Dandry

+2

私は最近同じ問題を抱えていましたが、私はMyService.Databaseのように見える名前空間を引き起こしたデータベースというフォルダに自分のデータベースクラスを持っていました。その場合、System.Data.Entity.Databaseを完全に指定する必要がありました。それ以外の場合は、そうする必要はありません。 – Anansi

+0

System.Data.Entityを使用して追加する必要があります。 DbContextクラスのDatabaseプロパティを使用しようとします。クラスが見つからないためです。 – DevilSuichiro

関連する問題