是否可以检索委托函数数据库并执行它



我遇到需要验证数据库字段的情况。每个字段都可以有自己的和不同的验证过程。是否可以在 C# 代码中将验证函数定义为委托签名,其中委托作为 NVARCHAR(MAX( 的实现在 SQL 数据库中?然后在运行时,我可以从数据库中检索此函数并执行它。

public delegate string ValidateFunction(List<string> Params)
.
if (Row[0].TranslateFunction != null)
{
    string test = GetTargeTableValue( new List<string> { "mm" }, Row[0].TranslateFunction);
}
.
 private string GetTargeTableValue(List<string> sqlParams, ValidateFunction FieldValidation)
{
      return FieldValidation(sqlParams);
}
.

行[0]。TranslateFunction 位于 NVARCHAR (max( 类型的数据库表中,包含类似(SQL (

'string GetUom( List<string> Params)
{return Params[0].ToUpper() } '

创建可序列化的验证类(从基类继承,以便它们都具有公共根(。您可以设置具有所需验证类型和验证所需数据的特定对象,这些对象可以转换为序列化文本并存储在数据库中。当您想要验证字段时,您可以将存储的文本反序列化为对象,然后针对该字段调用该对象(最好将规则加载回内存一次到缓存中并从那里使用它们,这可能会很慢(。

抱歉,我无法生成示例代码(需要相当多的代码来设置所有代码(,但我在以前的角色中做了类似的事情,其中验证规则存储在应用程序的配置文件中。

试试这个:

// add NuGet package 'Microsoft.CodeAnalysis.Scripting'
   using Microsoft.CodeAnalysis.CSharp.Scripting;
   await CSharpScript.EvaluateAsync("System.Math.Pow(2, 4)") // returns 16

var script = await CSharpScript.RunAsync(@"string GetUom( List<string> Params) {return Params[0].ToUpper() } ")
await script.ContinueWithAsync("GetUom(List<string> Params)");

欲了解更多信息请访问脚本 API 示例

如需更多学习,请访问

最新更新