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

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

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

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

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

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

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


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, у которого все эти параметры — проперти.


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

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