.NET 4でEF5を使用する必要があり、4.0バージョンのライブラリに存在しないHasDatabaseGenerationOption.Identityを使用してクラスをマッピングすると、参照の問題が発生しました。
以下は失敗しています:
this.Property(t => t.DeploymentLogId)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
誰かが回避策を知っていますか?
NuGetを使用して.NET4.5を対象とするプロジェクトにEntityFrameworkを追加すると、EntityFramework5.0が追加されます。
後でプロジェクトをターゲットの.NET4.0に変更した場合でも、EntityFramework5.0が参照されます。
これを修正するには、NuGetを使用してEntityFrameworkをアンインストールし、NuGetに追加し直します。これにより、.NET4.0でサポートされている最後のバージョンであるEntityFramework4.4が追加されます。
それでも機能しない場合は、App.config
に特定のEFバージョンへの参照がある可能性があります。これらは削除できます。
名前空間はEF5.0で変更されました。これを追加してみてください:
using System.ComponentModel.DataAnnotations.Schema;
データ注釈を使用してみましたか?
public class DeploymentLog
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int DeploymentLogId { get; set; }
System.ComponentModel.DataAnnotations.Schema
は、4.5以降.NETFrameworkの一部にすぎません。
4.0を使用している場合は、EntityFrameworkが4.0を提供します。 DatabaseGeneratedOption のソースコードと他のファイルを見ると、それらのコードが条件付きでラップされていることがわかります。
#if NET40
...
#endif
私たちはごく最近、古いプロジェクトでその問題を抱えていました。