4

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

  • HasDefaultValueSql
  • HasColumnName
  • HasColumnType
  • HasComputedColumnSql
  • HasDefaultValue

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

  • ForSqlServerHasDefaultValueSql
  • ForSqlServerHasColumnName
  • ForSqlServerHasColumnType
  • ForSqlServerHasComputedColumnSql
  • ForSqlServerHasDefaultValue

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

  • ForSqlServerUseSequenceHiLo

2 つのグループの違いは何ですか? また、いつどちらを使用するのですか?

4

1 に答える 1

4

私はこれを理解したと思います。EF Core では、さまざまなプロバイダーを使用できます (現時点では SQL Server と SQLite ですが、将来的には Azure Tables が登場すると思います)。これらのプロバイダーの機能はわずかに異なるため、使用されているプロバイダーに応じて、同じプロパティに対して異なる動作を指定できます。依存性注入の真の精神では、これにより、どのプロバイダーが使用されるかを気にしない 1 つのコンテキストをセットアップでき、プロバイダーの選択は DI コンテナーに任せることができます。

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

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

2 つのグループの違いは何ですか? また、いつどちらを使用するのですか?

  • プロバイダーに関係なく動作/構文が一定の場合は、「汎用」グループを使用します。上記の例では、すべてのプロバイダーに「ValidFromDate」という列名を使用しています。
  • 動作/構文がプロバイダーに依存する場合は、プロバイダー固有のメソッドを使用します。上記の例では、動作は同じですが、実際の SQL 式はプロバイダーごとに異なります。
于 2016-08-09T08:15:08.213 に答える