【问题标题】:Who moved my Database property?谁移动了我的数据库财产?
【发布时间】:2014-10-05 17:00:37
【问题描述】:

我有以下 DbContext 代码在使用 EF 6.1.0 的项目中工作,但使用 6.1.1 我收到抱怨 Database 不是静态的。任何建议:

public class DataMonitorDbContext : DbContext
{
    private static readonly ImportConfig Config = ImportConfig.Read();
    static DataMonitorDbContext() {
        Database.SetInitializer<DataMonitorDbContext>(null);
    }

    public DataMonitorDbContext(string connString = null)
         : base(!string.IsNullOrEmpty(connString) ? connString : ConnectionString) {

    }

    public DbSet<DataRecord> DataRecords { get; set; }
    public DbSet<LogEntry> LogEntries { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder) {
        base.OnModelCreating(modelBuilder);
        modelBuilder.Configurations.Add(new DataRecordMap());
        modelBuilder.Configurations.Add(new LogEntryMap());
    }

    private static string ConnectionString {
        get {
            return "Data Source=" + Config.DatabasePath;
        }
    }
}

【问题讨论】:

  • 我无法使用新的类库项目 EF 6.1.1 和您在 public class DataMonitorDbContext : DbContext 中的代码重现这一点。当您将鼠标悬停在 Database 上时,它是否指代 System.Data.Entity.Database?
  • 当我将鼠标悬停在它上面时,我收到一条错误消息,但是当我“转到声明”时,它确实转到 System.Data.Entity.DbContext,而不是 Database。
  • 你能分享文件的全部内容吗?还是仍然有错误的简化版本?
  • @Stijn 完成。用全班替换摘录。
  • 奇怪,它仍然适合我。您是否更新了解决方案中所有项目的 EF?还可以尝试重新启动 VS 并进行清理和重建。重新启动 VS 多次为我修复了奇怪的编译器错误。

标签: entity-framework entity-framework-6 dbcontext


【解决方案1】:

您是否尝试过使用完整的命名空间?

System.Data.Entity.Database.SetInitializer<DataMonitorDbContext>(null);

如果这样可行,则说明您没有包含正确的命名空间,或者存在命名空间冲突。

【讨论】:

  • 听起来很可能。这将解释为什么当 OP 导航到 Database 时 VS 会转到 System.Data.Entity.DbContext。这个想法已经进入我的脑海,但这个问题意味着除了更新 EF 包之外没有任何改变,所以我放弃了它。也许 OP 省略了细节。
  • 是的,@Stijn,当我使用完整的命名空间时它起作用了。真是奇怪的日子。
猜你喜欢
  • 2010-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-27
相关资源
最近更新 更多