17

VS2010とEF4.3を使用してASP.NETMVC4アプリケーションを開発しています。外部データベースからいくつかのデータを取得し、ある日再コンパイルしようとするまで、すべてが期待どおりに機能しました。コンパイル後、次のEFエラーが発生します。

無効な列名'CreatedOn'。

DBやコードの変更は行われませんでした。読みやすくするためにインデントを追加しただけです。TFSの以前のアプリケーションバージョンでも同じ例外がスローされます。

私のエンティティにはプロパティがなくCreatedOn、データベースにもそのようなフィールドはありません。また、それは必要ありません。また、どのような場合でも必要ありません。

この例外を回避するにはどうすればよいですか?

これは、データへのアクセスに使用するカスタムDBコンテキストです。

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 
{ 
}
4

4 に答える 4

14

私の場合、それはMiniProfilerでした。私はEF5.0を使用していますが、EF4.xを使用しています。プロファイラーを無効にした後、例外はスローされなくなりました

于 2013-01-24T12:45:07.683 に答える
10

EF 4.3.1はテーブルにCreatedOn列を追加し、EF5.0はその後削除しました。__MigrationHistoryデータベースを最後に更新してから、EFを4.3.1にアップグレードしたと思われます。

移行を実行してCreatedOn列を追加するか、手動で追加するか、不要になったEF5.0にアップグレードすることができます。

于 2012-08-30T09:35:20.573 に答える
6

私の質問に対する答えが見つかりました。返信ありがとうございます。

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

これにより、問題が修正され、EFでのDB変更の追跡が無効になります。

于 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 に答える