EF7プロパティビルダーの `Has ...`と `ForSqlServerHas ...`拡張メソッドの違いは何ですか?

ef-model-builder entity-framework-core

質問

Entity Framework 7(Entity Framework Core)には、 PropertyBuilder 2つの異なる拡張メソッドセットがあります。最初は「一般的な」セットのようです:

  • HasDefaultValueSql
  • HasColumnName
  • HasColumnType
  • HasComputedColumnSql
  • HasDefaultValue

次に、 "ForSqlServer"に一致するセットがあります。

  • ForSqlServerHasDefaultValueSql
  • ForSqlServerHasColumnName
  • ForSqlServerHasColumnType
  • ForSqlServerHasComputedColumnSql
  • ForSqlServerHasDefaultValue

また、 "汎用"の対応がない "ForSqlServer"拡張メソッドが1つ追加されているようです。

  • ForSqlServerUseSequenceHiLo

2つのグループの違いは何ですか?いつどのグループを使用しますか?

受け入れられた回答

私はこれを理解したと思う。 EFコアでは、さまざまなプロバイダを使用することができます(現時点ではSQL ServerとSQLite、Azureテーブルは今後登場すると思います)。これらのプロバイダの機能はわずかに異なるため、使用されているプロバイダに応じて同じプロパティに対して異なる動作を指定することができます。依存性注入の真の精神において、これは、どのプロバイダが使用されているかに関わらず、DIコンテナにプロバイダの選択肢を残して、1つのコンテキストを設定することを可能にします。

たとえば、本番環境ではSQL Serverを使用するアプリケーションがありますが、統合テストではSQLiteのメモリ内データベースを使用しています。 SQLは両者でわずかに異なるので、両方で同様に機能するデフォルト値を持つプロパティを作成できます。

b.Property(x => x.ValidFrom)
    .IsRequired()
    .HasColumnName("ValidFromDate")
    .ForSqlServerHasDefaultValueSql("getutcdate()")
    .ForSqliteHasDefaultValueSql("CURRENT_TIMESTAMP");

2つのグループの違いは何ですか?いつどのグループを使用しますか?

  • ビヘイビア/構文がプロバイダに関係なく一定である場合は、「汎用」グループを使用します。上記の例では、すべてのプロバイダに対して列名 "ValidFromDate"を使用しています。
  • ビヘイビア/構文がプロバイダに依存する場合は、プロバイダ固有のメソッドを使用します。上記の例では、動作は同じですが、実際のSQL式はプロバイダごとに異なります。


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ