2017-11-23 27 views
0

私は、DBContextクラスに基づいて自動生成されたクラスの一部としてストアドプロシージャの実行に必要な関数を自動的に生成するEntity Framework EDMXを使用しています。Entity Frameworkを使用したsql入力パラメータのサニタイズ

例えば

は、このストアドプロシージャを実行するための、自動生成された関数である:

私は、ストアドプロシージャのいくつかの内部で動的SQLを使用しておりますので
public virtual ObjectResult<Company> GetCompanies(string companyName) 
    { 
     var companyNameParameter = companyName != null ? 
      new ObjectParameter("CompanyName", companyName) : 
      new ObjectParameter("CompanyName", typeof(string)); 

     return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<Company>("GetCompanies", companyNameParameter); 
    } 

、私は、「カスタムExecuteFunctionを」ExecuteFunctionを上書きして使用したいですそこにいくつかのサニタイズ関数を追加して、各パラメータをループしてサニタイズします。私はおそらく、私はカスタムObjectContextクラスを作成し、何とかそれを使用することができますか?

私はまだEDMXエンティティフレームワークの自動生成関数を使用することができますか?

SP内のパラメータをサニタイズするいくつかの解決策がありますが、私はカスタムExecuteFunction関数またはカスタムObjectContextをEDMXと一緒に使用する方法を知りたいと思います。

+2

- その後:*ドン」をあなたは 'EXEC sp_executesql @sql、N '{args定義}'、@ arg0、@ arg1、...'を使っていなければなりません。これは動的SQLを完全にパラメータ化することを可能にします。より多くの文脈:https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-executesql-transact-sql –

+0

@MarcGravell私はそれを知っているが、私はまだどのように学ぶことができるカスタムExecuteFunction関数またはカスタムObjectContextをEDMXとともに使用します。 – Omtechguy

答えて

1

私はまだEDMXエンティティフレームワークの自動生成機能を使用することができますか?

生成された関数は仮想なので、サブクラスでオーバーライドできます。

例えば、あなたが*、それをサニタイズする...問題は、あなたが値を連結し、 `EXEC(@sql)を使用しているということであれば` *べきではありませんでし

public class MyDbContext2 : MyDbContext 
{ 
    public override ObjectResult<Company> GetCompanies(string companyName) 
    { 
     Sanatize(companyname); 
     return base.GetCompanies(companyName); 
    } 
//. . . 
} 
+0

そのように、私はMyDBContextで消毒する必要があるすべての機能にこれを行う必要があります。 ObjectContextから継承してExecuteFunction関数を何とかオーバーライドするオプションはありますか? – Omtechguy

+0

AFAIK no。また、動的SQLを使用しているプロシージャーでのみ、ストアード・プロシージャー自体の入力パラメーターをサニタイズしないために必要です。 –

関連する問題