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

Dan*_*dry 5 .net c# 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
    }
}
Run Code Online (Sandbox Code Playgroud)

上下文类看起来像这样:

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

    public LibraryContext()
    {
        Database.SetInitializer<LibraryContext>(new LibraryInitializer());
    }
}
Run Code Online (Sandbox Code Playgroud)

此时我收到以下错误:

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

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

Ham*_*jam 16

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

 System.Data.Entity.Database.SetInitializer<LibraryContext>(new LibraryInitializer());
Run Code Online (Sandbox Code Playgroud)

DbContext有一个Database属性是System.Data.Entity.Database类的实例.当您DatabaseDbContext其中写入指向该实例并且因为您无法从实例访问静态方法时,您会收到错误.

  • 谢谢你的回答,基本上解决了问题。好吧,问题是,当我检查任何解释如何构建初始化程序的教程/博客文章时(不想指向任何特定网站),它们实际上都没有显示完整的“System.Data.Entity.Database.SetInitializer..” ` 名字。我的代码是否强制使用它,或者没有在任何地方提到“每个人都应该知道这一点”? (2认同)
  • 我最近遇到了同样的问题,我将数据库类放在一个名为Database的文件夹中,这导致名称空间看起来像MyService.Database.在这种情况下,我必须完全指定System.Data.Entity.Database否则,您不必这样做. (2认同)