0

プロジェクトをEntityFramework4.3.1および.NET4からEntityFramework5.0および.NET4.5に更新することにしました。最初に.NETバージョンを更新し、.NET4互換の4.4.0.0ではなくEF5.0.0.0を参照していることを確認しました。

私は次のようなクラス構造を持っています

public class MyBase
{
    [NotMapped]
    public bool MyProperty { get; set; }
}

public class MyDefinition : MyBase
{
    // Some other properties
}

MyDefinitionインスタンスをロードしようとすると

using (MyContext ctx = new MyContext())
{
    ctx.Configuration.AutoDetectChangesEnabled = false;
    ctx.Configuration.LazyLoadingEnabled = false;
    ctx.Configuration.ProxyCreationEnabled = false;

    var defs = from def in ctx.MyDefinitions.AsNoTracking() select def;

    foreach (MyDefinition def in defs) // <-- Exception here
    {
        // Do stuff
    }
}

SqlExceptionが発生します

列名'MyProperty'が無効です。

これは、既存のスキーマが有効かどうかを判断する目的でNotMappedが尊重されるかのようですが、EF 5によって生成されるSELECTは、MyProperty列があることを想定しています。

基本クラスと派生クラスは、異なるアセンブリで定義されています。両方のアセンブリを注意深くチェックして、EF5.0.0.0およびターゲット.NET4.5を参照していることを確認しました。

Intellisenseは、 NotMappedSystem.ComponentModel.DataAnnotations.Schema.NotMappedであると主張しています

EF 5がその存在しない列を選択しないようにするにはどうすればよいですか?

4

2 に答える 2

1

これを追加

using System.ComponentModel.DataAnnotations.Schema
于 2012-08-17T04:42:23.947 に答える
0

D'oh!

今日もVS2012にアップデートしました。ビルド後のイベントで関係のない問題が発生し、基本クラスを含む以前のバージョンのアセンブリを派生クラスで使用できるようになりました。ビルド後のイベントを修正すると、問題が解決しました。

于 2012-08-16T00:27:25.033 に答える