Информация об изменениях

Сообщение Re: А можно ли запретить "обычный" вызов метода? от 01.08.2017 18:25

Изменено 01.08.2017 18:32 bnk

Re: А можно ли запретить "обычный" вызов метода?
Здравствуйте, Artem Korneev, Вы писали:

AK>Есть у меня хранимые процедуры в SQL-базе и мэппинг на EntityFramework для вызова тех хранимых процедур.

AK>Т.к. это SQL, там бывают довольно длинные списки параметров.

AK>Все или почти все параметры — одного типа (string). Если вызывать процедуру без указания имён параметров, то там запросто можно дико накосячить.

AK>Можно ли как-то средствами C# запретить вызов метода без указания имён параметров? Т.е. чтоб вот такая инструкция сразу давала ошибку компилляции:

AK>
AK>var studies = ctx.usp_SearchStudies(
AK>    patientId,
AK>    facilityMrn,
AK>    firstName,
AK>    lastName,
AK>    patientName,
AK>    firstAndLastName,
AK>    middleName,
AK>    patientPrefix,
AK>    patientSuffix,
AK>    gender,
AK>    modality,
AK>    aetitle,
AK>    studyId,
AK>    description,
AK>    accession,
AK>    refPhysician,
AK>    studyDateFrom,
AK>    studyDateTo,
AK>    perPhysician);
AK>


AK>?


если вызов не авто-генерированый, то есть стандартное решение — передавать объект params, у которого все эти параметры — проперти.


тогда не будет проверяться что ты их все поставил, но это решается гораздо проще, через валидацию, которая скорее всего и так уже есть на уровне базы.

Если авто-генерированвй, менять генератор.
Re: А можно ли запретить "обычный" вызов метода?
Здравствуйте, Artem Korneev, Вы писали:

AK>Есть у меня хранимые процедуры в SQL-базе и мэппинг на EntityFramework для вызова тех хранимых процедур.

AK>Т.к. это SQL, там бывают довольно длинные списки параметров.

AK>Все или почти все параметры — одного типа (string). Если вызывать процедуру без указания имён параметров, то там запросто можно дико накосячить.

AK>Можно ли как-то средствами C# запретить вызов метода без указания имён параметров? Т.е. чтоб вот такая инструкция сразу давала ошибку компилляции:

AK>
AK>var studies = ctx.usp_SearchStudies(
AK>    patientId,
AK>    facilityMrn,
AK>    firstName,
AK>    lastName,
AK>    patientName,
AK>    firstAndLastName,
AK>    middleName,
AK>    patientPrefix,
AK>    patientSuffix,
AK>    gender,
AK>    modality,
AK>    aetitle,
AK>    studyId,
AK>    description,
AK>    accession,
AK>    refPhysician,
AK>    studyDateFrom,
AK>    studyDateTo,
AK>    perPhysician);
AK>


AK>?


если вызов не авто-генерированый, то есть стандартное решение — передавать объект params, у которого все эти параметры — проперти.


тогда не будет проверяться что ты их все поставил, но это решается гораздо проще, через валидацию, которая скорее всего и так уже есть на уровне базы.

Если авто-генерированвй, менять генератор

Если они приходят с фроненда, можно начать использовать автомаппер (automapper) например.