Можно ли получить базу данных функции делегата и оправдать ее? - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть ситуация, в которой мне нужно проверить поля базы данных. Каждое поле может иметь свой собственный и отдельный процесс проверки. Можно ли определить функцию проверки как сигнатуру делегата в коде 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);
}
.

Row [0] .TranslateFunction находится в таблице базы данных типа NVARCHAR (max) и содержит что-то вроде (SQL)

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

Ответы [ 2 ]

1 голос
/ 05 апреля 2019

Создать сериализуемые классы валидации (наследуются от базового класса, чтобы у них всех был общий корень). Вы можете настроить конкретные объекты с требуемым типом проверки и с необходимыми данными для проверки, которые можно преобразовать в сериализованный текст и сохранить в вашей базе данных. Когда вы хотите проверить поле, вы можете десериализовать сохраненный текст в объект, а затем вызвать объект против поля (лучше загрузить правила обратно в память один раз в кеш и использовать их оттуда, это может быть медленным).

Извините, я не могу создать пример кода на макушке (достаточно кода, чтобы все настроить), но я делал нечто похожее в предыдущей роли, где правила проверки хранились в файл конфигурации приложения.

0 голосов
/ 05 апреля 2019

попробуйте это:

// 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 сценариев

и для дополнительной учебной поездки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...