10

.NET 4.0およびEF 5.0を対象としたプロジェクトがあります。ターゲットフレームワークを4.5に変更した後(そして、.NET 4.5アセンブリを使用するようにEF 5.0のリファレンスを更新する)、データ注釈がもう機能していないようです。たとえば:.NET 4.5をターゲットとした後、EFデータ注釈が「機能していません」

[Table("ApplicationSession", Schema = "Application")] 
public class ApplicationSessionEntity 
{ 
    [Key, ForeignKey("GenericSession")] 
    public int GenericSessionID { get; set; } 
... 

が正常に動作するために使用されるが、今、実行時に、DbContextInvalidOperationExceptionをスロー:Unable to determine the principal end of an association...

これを解決するためにFluent APIコールを追加できますが、それはテーブルが "dbo"スキーマにないことを認識しません。繰り返しますが、私はFluent apiを使ってこれを解決できることを知っていますが、なぜデータアノテーションが突然無視されていますか?

ありがとうございます!

+1

System.ComponentModel.Annotationsへの参照がありますか?注釈は.NET Framework 4.5でこのアセンブリに移動されました。私が考えていることは、どういうわけか古いアノテーションアノテーションでコンパイルしていて、EF5ランタイムは新しいものを探しているということです。あなたはテーブル上のF12キーを押して、これをチェックする場所を見ることができます。 – Pawel

+0

@Pawel System.ComponentModel.DataAnnotationsへの参照があります。 EF 5.0にアップグレードしたときに必要だったと思います。私はそのアセンブリの.NET 4.0と.NET 4.5バージョンを使用しようとしましたが、どちらも同じ動作を示します。 – Rob

+0

バージョン4.4.0.0のEntityFramework.dllへの参照がありますか? – Pawel

答えて

7

.NET Framework 4.5では、EFアノテーションがEF.dllからSystem.ComponentModel.Annotationsアセンブリに移動されました。 .NET Framework 4.5をターゲットにしていても、EntityFramework.dll v4.4.0.0の参照はまだどこかにあるようです。その結果、クラスは4.4.0.0アセンブリの属性でコンパイルされます。実行時に、新しいEntityFramework.dll(5.0.0.0)が使用され、System.ComponentModel.DataAnnotationsアセンブリから属性が検索されます。それらはあなたがEF.dll 4.4.0.0からのものを持っているので見つからないので、属性が無視されているように見えます。

+0

ありがとうございます。プロジェクトを4.0から4.5にアップグレードし、EF 4.4.0.0への参照がハングアップしました。 4.4.0.0への参照を削除し、nugetインストールパッケージを実行しました。 – formatc

0

.NETバージョン4.5以上を使用している場合は、EFの外に移動したことは事実です。しかし、.NET 4.0でコンパイルすると、DataAnnotationsが使用されています。

#if NET40 

namespace System.ComponentModel.DataAnnotations 
{ 
... 
} 
#endif 

だから...はい、他の回答と同じですが、私はこれを指摘したい:コード内で見ると、あなたはこれを見つけます!

ハッピーコーディング!

関連する問題