Как сказал христианин, это может быть выполнено через ParameterSetNames. Взгляните на этот пример:
function Get-MySPWeb {
[CmdletBinding(DefaultParameterSetName="set1")]
param (
[parameter(ParameterSetName="set1")] $RelativeUrl,
[parameter(ParameterSetName="set2")] $WebUrl,
[parameter(ParameterSetName="set2", Mandatory=$true)] $DisplayName
)
Write-Host ("Parameter set in action: " + $PSCmdlet.ParameterSetName)
Write-Host ("RelativeUrl: " + $RelativeUrl)
Write-Host ("WebUrl: " + $WebUrl)
Write-Host ("DisplayName: " + $DisplayName)
}
Если вы запустите его с помощью -RelativeUrl Foo
, он будет привязан к «set1». Если вы вызываете эту функцию без параметров, она также привязывается к «set1».
(Примечание - , когда в PowerShell v3 (с предварительным просмотром Win8) нет параметров, он будет привязан к «set1», однако привязка ошибок в PowerShell v2 будет связана с ошибкой, если вы не добавите [CmdletBinding(DefaultParameterSetName="set1")]
в [@ g0])
Если вы попытаетесь запустить его со значением параметра из обоих наборов, вы получите сообщение об ошибке.
Если вы запустите его с помощью -WebUrl Bar
, он предложит вам значение параметра для DisplayName, потому что это обязательный параметр.
Это невозможно с EF Core 2.2. Существует предложение для такой функции, но я бы не стал задерживать дыхание.
Если JSON, который вы храните, мал и / или обновления редки, я бы выбрал первый подход, поскольку изменения хранятся в контексте, и вам не нужна транзакция, и она лучше согласуется с общим дизайном EF , Кроме того, это обеспечивает безопасность времени компиляции и упрощает рефакторинг / изменение. Проверьте этот поток - Как сохранить JSON в поле сущности с EF Core?
Если вам нужна производительность, чем определенно команда JSON_MODIFY sql.