プロジェクトを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は、 NotMappedはSystem.ComponentModel.DataAnnotations.Schema.NotMappedであると主張しています
EF 5がその存在しない列を選択しないようにするにはどうすればよいですか?