2

私は、サプライヤーが常にサプライヤーグループを持っている必要があるエンティティフレームワークコードファーストモデルを持っています:

    public virtual SupplierGroup SupplierGroup { get; set; }
    public int SupplierGroupId { get; set; }

ただし、基礎となるデータベースでは、SupplierGroupId を null 可能にする必要があります (それを使用する別のシステムが原因で、SupplierGroup なしで Supplier が存在する可能性があります)。

Entity Framework に null 許容データベース フィールドを生成/マップさせる方法はありますか?

私は流暢なマッピングを試みました:

modelBuilder.Entity<Supplier>()
     .Property(s => s.SupplierGroupId)
     .IsOptional();

しかし、コードが最初にデータベースを生成したとき、フィールドはまだ nullable ではありませんでした。

(SupplierGroup のないサプライヤが要求された場合、これは決して発生しないため、例外をスローする必要があります)。

4

1 に答える 1

3

intプロパティが null 許容列になるような方法で、既定のデータベース初期化子を使用して Entity Framework でデータベースを作成することは不可能です。私が見る限り、あなたのオプションは次のとおりです。

  1. 列を null 非許容列から null 許容列に変更する SQL スクリプトを実行するカスタム データベース初期化子を記述します。

  2. Entity Framework を使用してデータベースを作成するのではなく、代わりに手動で (データベース初期化子を設定するnullなどして)、null 許容列と null 非許容プロパティを使用します。

  3. データベースに反映されていないアプリケーション固有のビジネスロジックとして要件を扱います(DBにアクセスする他のアプリケーションにはNULLsを許可する要件があるため、そうではありません)。つまり、プロパティを作成int?し、アプリケーションでnull決して使用されないことを確認します

オプション1と2の場合、モデルはデータベースと「同期していません」。これは、データベースからロードすると例外が発生することを意味します(Supplierおそらく「...マテリアライズされた値NULLを非- null 許容プロパティ...」 )。SupplierGroupIdNULL

私はオプション 3 を選択します。

于 2013-03-07T18:58:50.387 に答える