2012-08-30 81 views
16

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

Invalid column name 'CreatedOn'.

没有DB或代码进行了更改, - 我只是增加了可读性一些缺口。以前的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); 
    } 
} 

这是Label类

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

public class Label : BaseEntity 
{ 
} 
+0

您可以发布'Label'类吗? – Eranga

+0

这是标签类别: public class BaseEntity:IDataEntity { public int Id {get;组; } public string Name {get;组; } 公共字符串ChangedBy {get;组; }} 公共类标签:BaseEntity {} – msaruyev

+0

这个问题也是在这里讨论: http://stackoverflow.com/questions/19646659/createdon-column-in-entity-framework-6 – AXMIM

回答

6

找到了我的问题的答案。感谢所有的答复。

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

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

+0

感谢这很有用,但我采用这只作为调试的临时修复,因为我不知道我想永远禁用数据库更改跟踪...(请参阅我的混淆) –

10

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

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

+0

DB没有改变以任何方式。我在数据库中没有“_migrationHistory”表,我没有权限更改此数据库中的某些内容。我正在使用.net framework 4.0,并尝试使用NuGet接收架构相关的异常升级到EF 5时: 指定的架构无效。错误: (0,0):警告0005:找不到属性'名称空间'的模式信息。 (0,0):警告0005:找不到属性'Provider'的模式信息。 (0,0):警告0005:找不到属性'ProviderManifestToken'的模式信息... – msaruyev

+1

您会在'系统表'下找到__MigrationHistory表。恐怕我不知道升级到EF 5.0时出现的错误是什么,但从技术上讲它应该可以在.NET 4.0上工作。 –

+1

这没有意义,因为我得到这个错误,我从来没有碰过EF5或EF4。我只使用EF6:X。 –

1

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

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

+0

正如您从我的自定义数据库上下文中可以看到的,我已经将Configuration.AutoDetectChangesEnabled = false,但这没有帮助。有没有其他方法来禁用EF中的数据库更改检测? – msaruyev

13

在我的情况下,它是MiniProfiler。我使用EF 5.0,它使用EF 4.x.禁用Profiler后,异常不再被抛出