是否可以检索委托函数数据库并将其执行?

时间:2019-04-05 10:53:05

标签: c# delegates

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

示例

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);
}
.

Row [0] .TranslateFunction位于类型为NVARCHAR(最大)的数据库表中,并且包含类似 (SQL)

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

2 个答案:

答案 0 :(得分:1)

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

对不起,我无法产生示例代码(要完成所有设置,需要大量代码),但是我在以前的角色中做了类似的事情,其中​​验证规则存储在应用程序的配置文件。

答案 1 :(得分:0)

尝试一下:

// 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)");

更多信息 请拜访 Scripting API Samples

for more learning visit