17

我正在使用 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 
{ 
}
4

4 回答 4

14

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

于 2013-01-24T12:45:07.683 回答
10

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

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

于 2012-08-30T09:35:20.573 回答
6

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

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

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

于 2012-08-30T12:45:19.253 回答
1

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

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

于 2012-08-30T09:43:37.510 回答