无法使用自定义数据库初始化程序

时间:2016-04-30 09:56:29

标签: c# .net asp.net-mvc entity-framework

我正在构建一个用于管理库的简单MVC应用程序。出于开发目的,我希望每次模型更改时EF都会删除并重新创建数据库,并填充一些示例数据。在这一刻,我努力让初始化器工作。 Initializer类如下所示:

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());
    }
}

此时我收到以下错误:

  

会员&#39; Database.SetInitializer(IDatabaseInitializer)&#39;无法使用实例引用访问;使用类型名称来限定它

基于Web上提供的许多指南,这是使用初始化程序的方法,但我不知道为什么会出现此错误。 任何帮助都会得到很大的帮助。 谢谢!

1 个答案:

答案 0 :(得分:14)

C#中,您无法从实例访问static个成员。您必须使用类型名称访问static成员。使用完整类型名称。

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

DbContext具有Database属性,该属性是System.Data.Entity.Database类的实例。当您在Database中编写DbContext时,它指向该实例,并且由于您无法从实例访问静态方法,因此会出现错误。