我正在构建一个用于管理库的简单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上提供的许多指南,这是使用初始化程序的方法,但我不知道为什么会出现此错误。 任何帮助都会得到很大的帮助。 谢谢!
答案 0 :(得分:14)
在C#
中,您无法从实例访问static
个成员。您必须使用类型名称访问static
成员。使用完整类型名称。
System.Data.Entity.Database.SetInitializer<LibraryContext>(new LibraryInitializer());
DbContext
具有Database
属性,该属性是System.Data.Entity.Database
类的实例。当您在Database
中编写DbContext
时,它指向该实例,并且由于您无法从实例访问静态方法,因此会出现错误。