質問: 私は現在、エンティティフレームワーク7を使用していたAsp.Net 5プロジェクトで、以前はEF 6でデータベースを設定していましたが、カラムの一部をnullにしたい場合は、 ``` modelBuilder.Entity().Property(t => t.ArticleDateModified).IsOptional(); ``` しかし、 `IsOptional`は`IsOptional`一部ではないようですが、 `IsOptional`を使って同じことを達成するにはどうすればいいですか? **編集:**私は`IsOptional`ような何かを見つけたので、それは働いたが、Marcの答えは確かに正しい`IsOptional` 。 ``` builder.Entity().Property(t => t.ArticleDateModified).IsRequired(false); ``` しかし、私はそれなしでいくつかのテストを実行した後、私はそれが私のドメインモデルでnullableとしてマークしたので、データベースの列nullableを設定します: ``` public DateTime? ArticleDateModified { get; set; } ``` また、 `DateTime`にできないようにして、 `IsRequired(false)`を使用した`IsRequired(false)` 、次のエラーが発生することに注意してください。 > エンティティタイプ 'Article'のプロパティ 'ArticleDateModified'は、プロパティの型がnull可能型ではない 'DateTime'であるため、nullable / optionalとしてマークすることはできません。すべてのプロパティは、nullable / requiredとしてマークできますが、null可能な型のプロパティとプライマリキーの一部でないプロパティは、nullable / optionalとしてマークできます。 > > だから、もし私がデータベースカラムをnull値にするために必要なことが、私のドメインクラスでnullableにする必要があるなら、ここで`IsRequired(false)`使い方は何ですか?
回答: このドキュメントページの注記に基づいて、これを宣言的に行うことのサポートが取り消されたように見えます。ウィットに: > CLR型にnullを含めることができないプロパティは、オプションとして構成することはできません。このプロパティは、Entity Frameworkによって常に必要と見なされます。 > > これが意図的だったということは、GitHubでホストされているプロジェクトのデザインディスカッションに具体的に示されています。 > つまり、nullableとしてマークされたプロパティはnull値をサポートし、null以外の値としてマークされたプロパティはnull値を含むことはできません。このことから、ヌルを許可することができるように、nullを許可しないCLRタイプのプロパティをマークすることは許可されません。 *これが許可されているEF6の動作とは異なります。* [強調された] > > 結論として、EF7では、 `NULL`列は厳密にnull可能なマップされたプロパティを意味します。プロパティがnullableの場合、 `IsRequired`マークまたは設定しない限り、関連する列は`NULL`なければなりません。 *OP編集に対する応答* 興味深いことに、私は`IsRequired(bool)` APIのドキュメントを最初に見たことはありませんでした。私は6月の会議ノートで、これ*が* EF6の`IsOptional()`と同等である*と述べ*た議論のポイントを見つけました。 > .IsOptional() - この関数は、Required(false)を呼び出して提供します。 > .IsRequired() - 同じ機能を持つRequired()を提供する > > これが元の意図であったにもかかわらず、サポートを取り消す意思決定は10月からとなりました。 (更新ごとに)nullを`IsRequired(false)`しないプロパティで`IsRequired(false)`を設定しようとすると、完全に削除されずに実行時エラーが発生します。 余分なものではありませんが、APIは有効なコードを壊さずに削除することはできません。個別の`IsRequired(bool)`および`IsRequired()`定義では実装されていませんが、 `IsRequired(bool required = true)`それが削除され、パラメータのないバージョンに置き換えられた場合、それは急変します。