web-dev-qa-db-ja.com

.NET4.0上のEntityFramework 5-DatabaseGeneratedOption.Identityが未定義です

.NET 4でEF5を使用する必要があり、4.0バージョンのライブラリに存在しないHasDatabaseGenerationOption.Identityを使用してクラスをマッピングすると、参照の問題が発生しました。

以下は失敗しています:

this.Property(t => t.DeploymentLogId)
              .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

誰かが回避策を知っていますか?

13
Hotrodmonkey

NuGetを使用して.NET4.5を対象とするプロジェクトにEntityFrameworkを追加すると、EntityFramework5.0が追加されます。

後でプロジェクトをターゲットの.NET4.0に変更した場合でも、EntityFramework5.0が参照されます。

これを修正するには、NuGetを使用してEntityFrameworkをアンインストールし、NuGetに追加し直します。これにより、.NET4.0でサポートされている最後のバージョンであるEntityFramework4.4が追加されます。

それでも機能しない場合は、App.configに特定のEFバージョンへの参照がある可能性があります。これらは削除できます。

23
Thomsen

名前空間はEF5.0で変更されました。これを追加してみてください:

using System.ComponentModel.DataAnnotations.Schema;
11
jrummell

データ注釈を使用してみましたか?

public class DeploymentLog
{
   [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int DeploymentLogId { get; set; }
3
Mark Oreta

System.ComponentModel.DataAnnotations.Schemaは、4.5以降.NETFrameworkの一部にすぎません。

4.0を使用している場合は、EntityFrameworkが4.0を提供します。 DatabaseGeneratedOption のソースコードと他のファイルを見ると、それらのコードが条件付きでラップされていることがわかります。

#if NET40
...
#endif
1
user247702

私たちはごく最近、古いプロジェクトでその問題を抱えていました。

  • プロジェクト内のEntityFramework参照を削除します
  • プロジェクトを右クリックし、NuGetパッケージの管理を実行し、[更新]カテゴリに移動して、リストにあったEntityFrameworkアイテムの[更新]をクリックしてバージョン6にします。
1
Simon Mourier