【问题标题】:Entity Framework 4.3. Invalid column name 'CreatedOn'实体框架 4.3。列名“CreatedOn”无效
【发布时间】:2012-08-24 23:31:19
【问题描述】:

我正在使用 VS 2010 和 EF 4.3 开发一个 ASP.NET MVC 4 应用程序。它从外部数据库中检索一些数据,并按预期工作,直到有一天我尝试重新编译它。编译后我收到以下 EF 错误:

列名“CreatedOn”无效。

没有进行数据库或代码更改 - 我只是添加了一些缩进以提高可读性。来自 TFS 的先前应用程序版本也会引发相同的异常。

我的实体中没有CreatedOn 属性,数据库中也没有这样的字段,我不需要它,无论如何也不想要它。

应该怎么做才能避免这个异常?

这是我用来访问数据的自定义数据库上下文:

public class MyContext<T> : DbContext where T : class, IDataEntity
{
   public MyContext(string connectionKey)
        : base("name=" + connectionKey)
    {
        Configuration.AutoDetectChangesEnabled = false;            
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Label>().Property(item => item.Id).HasColumnName("LabelId");
        modelBuilder.Entity<Label>().Ignore(item => item.ChangedBy);
    }
}

这是标签类

public class BaseEntity : IDataEntity 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string ChangedBy { get; set; } 
} 

public class Label : BaseEntity 
{ 
}

【问题讨论】:

  • 你能发布Label类吗?
  • 这是标签类: public class BaseEntity : IDataEntity { public int Id { get;放; } 公共字符串名称 { 获取;放; } 公共字符串 ChangedBy { get;放; } } 公共类标签 : BaseEntity { }
  • 这里也讨论了这个问题:stackoverflow.com/questions/19646659/…

标签: asp.net-mvc entity-framework entity-framework-4


【解决方案1】:

就我而言,它是 MiniProfiler。我使用 EF 5.0,它使用 EF 4.x。禁用分析器后,不再抛出异常

【讨论】:

    【解决方案2】:

    EF 4.3.1 在__MigrationHistory 表中添加了一个CreatedOn 列,EF 5.0 随后将其删除。我怀疑自从您上次更新数据库以来,您已将 EF 升级到 4.3.1。

    您可以运行迁移以添加 CreatedOn 列,自己手动添加,或者升级到不再需要的 EF 5.0。

    【讨论】:

    • DB 没有以任何方式改变。我在数据库中没有“_migrationHistory”表,我无权更改此数据库中的某些内容。我正在使用 .net 框架 4.0,并且在尝试使用 NuGet 升级到 EF 5 时收到与架构相关的异常:指定的架构无效。错误:(0,0):警告 0005:找不到属性“命名空间”的架构信息。 (0,0):警告 0005:找不到属性“提供者”的架构信息。 (0,0):警告 0005:找不到属性“ProviderManifestToken”的架构信息...
    • 您会在“系统表”下找到 __MigrationHistory 表。恐怕我不知道升级到 EF 5.0 时会出现什么错误,但从技术上讲,它应该适用于 .NET 4.0
    • 这没有意义,因为我收到此错误并且我从未接触过 EF5 或 EF4。我只使用 EF6 :X。
    • 这个答案仅在编写时才保证有意义,这远在 EF 6 发明之前。
    【解决方案3】:

    找到我的问题的答案。谢谢大家的回复。

    Database.SetInitializer<MyContext<Label>>(null);
    

    这解决了问题并禁用了 EF 中的数据库更改跟踪。

    【讨论】:

    • 谢谢,这很有用,但是我只是将它作为调试的临时修复,因为我不确定我是否想永远禁用数据库更改跟踪......(见我的困惑)
    【解决方案4】:

    实际上 __MigrationHistory 表中有 CreatedOn 列,因此问题可能与 EF 迁移有关。如果没有代码更改、未决迁移或任何错误,则确实是一个非常奇怪的情况。

    PS。我发现了这个,它可能会有所帮助:http://bstechnical.blogspot.fi/2012/08/invalid-column-name-createdon-code-first.html

    【讨论】:

    • 正如您从我的自定义数据库上下文中看到的那样,我已经将 Configuration.AutoDetectChangesEnabled = false,但这没有帮助。有没有其他方法可以禁用 EF 中的数据库更改检测?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多