3

この手順 (以下を参照) を Entity Framework 4.0 に変換するには、助けが必要です。これを移植する方法について誰か提案がありますか。対象プロジェクトには以下が含まれます。Silverlight 4、WCF RIA サービス、EF 4.0、SQL Server 2008 R2。

私が持っている唯一の要件は、ストアド プロシージャではなくマネージ コードに配置する必要があるということです。

    Try 
    {
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = cn;
        cmd.CommandType = CommandType.Text;
        string sql = "OPEN SYMMETRIC KEY " + this._encryptKey;
        sql += " DECRYPTION BY CERTIFICATE " + this._encrpytCert; 
        sql += " SELECT TOP (1) CONVERT(nvarchar(50),DECRYPTBYKEY(Field1)) AS Name";
        sql += " FROM Table3"; 
        sql += " ORDER BY CONVERT(nvarchar(50),DECRYPTBYKEY(Field1))";
        cmd.CommandText = sql;
        Name = (String)cmd.ExecuteScalar();
        bRtn = false;
    }
        catch (Exception ex)
    {
        System.Diagnostics.Debug.Print(ex.ToString());
    }

これを設定する方法を教えてください。ありがとうございます。

4

2 に答える 2

1

Entity Framework を介してクエリを実行し、ObjectContext.ExecuteStoreQuery<>()関数を使用して厳密に型指定された結果を取得できます (この例を参照してください)。

残念ながら、T-SQL ステートメントを自分で生成しなければならないことを回避する方法はないと思います。SqlFuntionsクラスを介して Linq-to-Entities クエリで SQL Server の関数の多くを使用できますが、SQL Server の関数を変換DECRYPTBYKEYする関数はありません。また、Entity Framework がキーを開くためのステートメントを生成しないという事実は言うまでもありません。 .

于 2013-03-16T03:15:38.197 に答える
0

機密データのクエリを実行する前に暗号化を解除するには、EF ObjectContext 接続で DbTransaction を使用するだけです。

いえ

  • connection.Open();
  • connection.BeginTransaction();
  • 「OPEN SYMMETRIC KEY...」コマンドまたはストアド プロシージャを ExecuteStoreCommand で実行する 機密データ クエリ、ストアド プロシージャなどを実行する
  • 必要に応じてトランザクションをコミットまたはロールバックします

これにより、db トランザクションを開始したため、EF は同じ db 接続を維持する必要があり、同じ db トランザクションの一部として一連の SP を実行する可能性があるため、これは理にかなっています。

于 2014-06-19T23:28:09.083 に答える