【问题标题】:unable to use custom database initializer无法使用自定义数据库初始化程序
【发布时间】:2016-08-25 12:05:53
【问题描述】:

我正在构建一个简单的 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());
    }
}

此时我收到以下错误:

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

根据网络上提供的许多指南,这是使用初始化程序的方法,但我不知道为什么会出现此错误。 任何帮助将不胜感激。 谢谢!

【问题讨论】:

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


    【解决方案1】:

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

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

    DbContext 有一个Database 属性,它是System.Data.Entity.Database 类的一个实例。当您在 DbContext 中写入 Database 时,它指向该实例,并且由于您无法从实例访问静态方法,因此您会收到错误消息。

    【讨论】:

    • 感谢您的回答,这几乎解决了问题。好吧,问题是,当我查看任何解释如何构建初始化程序的教程/博客文章(不想指向任何特定网站)时,它们实际上都没有显示完整的 System.Data.Entity.Database.SetInitializer.. 名称。是我的代码强制使用它还是在任何地方都没有提到“每个人都应该知道”?
    • 我最近遇到了同样的问题,我将数据库类放在一个名为 Database 的文件夹中,这导致命名空间看起来像 MyService.Database。在这种情况下,我必须完全指定 System.Data.Entity.Database 否则,您不必这样做。
    • 您需要使用 System.Data.Entity 添加;进入您的使用说明 - 否则它将尝试使用您的 DbContext 类的 Database 属性,因为它找不到该类。
    • 我在使用指令添加 System.Data.Entity 时遇到错误。只有像 dotctor 解释的那样完全限定类型,我才能解决问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-10
    • 2012-05-16
    • 1970-01-01
    • 2018-02-18
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多