我遇到需要验证数据库字段的情况。每个字段都可以有自己的和不同的验证过程。是否可以在 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 示例
如需更多学习,请访问