интерфейс по конкретным параметрам C # - PullRequest
0 голосов
/ 01 мая 2018

У меня есть динамический метод (dynamicQuery), который получает Enum (хранимая процедура) и Dictionary<string,string>, который будет заполнять параметры SQLParameters на основе содержимого словаря.

Допустим, у меня есть 3 хранимых процедуры на сервере SQL, которые принимают разные параметры с именем sp_insert_product, sp_insert_person, sp_insert_house.

Как я заставлю словарь принимать определенные строки для передачи хранимой процедуре на основании того, что хранимая процедура принимает?

Другой взгляд на сравнение. Перегруженный словарь, как вы делаете с методами.

РЕДАКТИРОВАТЬ
ВОЗМОЖНОЕ РЕШЕНИЕ
Я, вероятно, могу создать проверку внутри метода dynamicQuery, чтобы проверить, соответствует ли содержимое словаря параметрам указанной хранимой процедуры.

Но я хочу сделать проверку ошибок перед компиляцией, в отличие от проверки во время выполнения, которая снизит производительность

Я прибег к ADO.NET

Спасибо

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

Если я понимаю, что вы пытаетесь сделать, то это очень сложно сделать, если между сайтами нет жесткого контракта. Но пока код, который имеет дело с обоими, близок, это обычно не проблема, например:

string DoSomething(string username, string value) {
    var dict = new Dictionary<string,string> {
        { nameof(username), username },
        { nameof(value), value },
    };
    SomeHelper.ExecuteSP("sp_somesp", dict);
}

Обратите внимание, что то же самое можно также сделать с помощью анонимных типов и отражений, например:

string DoSomething(string username, string value) {
    SomeHelper.ExecuteSP("sp_somesp", new { username, value });
}

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

0 голосов
/ 01 мая 2018

Если я правильно понимаю ваш вопрос, вы можете использовать enum в качестве ключа для словаря.

enum Procedures
{
    insert_prod,
    insert_person
};

var dic = new Dictionary<Procedures, string[]>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...