sql >> データベース >  >> RDS >> Sqlserver

EFが不要なヌルチェックを使用してSQLクエリを生成するのはなぜですか?

    UseDatabaseNullSemantics = trueを設定します;

    • UseDatabaseNullSemantics == trueの場合 、(operand1 == operand2) 次のように翻訳されます:

      WHERE operand1 = operand2
      
    • UseDatabaseNullSemantics == falseの場合 、(operand1 == operand2) 次のように翻訳されます:

      WHERE
          (
              (operand1 = operand2)
              AND
              (NOT (operand1 IS NULL OR operand2 IS NULL))
          )
          OR
          (
              (operand1 IS NULL)
              AND
              (operand2 IS NULL)
          )
      

    これはMicrosoftによって文書化されています:

    2つのオペランドを比較するときに、データベースのnullセマンティクスが表示されるかどうかを示す値を取得または設定します。どちらも潜在的にnull可能です。デフォルト値はfalseです。

    DbContextで設定できます 次のようなサブクラスコンストラクタ:

    public class MyContext : DbContext
    {
        public MyContext()
        {
            this.Configuration.UseDatabaseNullSemantics = true;
        }
    }
    

    または、この設定をdbContextに設定することもできます 以下のコード例のような外部からのインスタンス、私の観点から(@GertArnoldコメントを参照)、デフォルトのデータベースの動作や構成を変更しないため、このアプローチの方が優れています):

    myDbContext.Configuration.UseDatabaseNullSemantics = true;
    


    1. SQLでの行パターン認識

    2. SQLiteクエリ結果をタブ区切りリストとして出力

    3. C#アプリケーションでSQL Serverデータベースのすべてのテーブルの名前を取得できますか?

    4. rownum=3の給与からrownumを選択します。