Можно ли использовать EF Core FromSql для выполнения хранимой процедуры с необязательными параметрами?
Я тестировал простой сценарий для использования в качестве шаблона для обновления старых вызовов EF6 до вызовов EF Core. Тестовый пример, который я использую в качестве подтверждения концепции:
CREATE PROCEDURE [dbo].[TestNullableParameters]
@addressId int = null,
@city nvarchar(100) = null,
@createdByUserId int
AS
BEGIN
select * from CRM..Address a
where (@addressId is null or a.AddressId = @addressId)
and (@city is null or a.City like @city)
and a.CreatedByUserId = @createdByUserId
END
Мой тестовый код, который вызывает этот процесс:
[Test]
public void TestNullableParameters()
{
var procName = "exec CRM..TestNullableParameters ";
var context = _testContainer.Resolve<CRM2Context>();
var addressId = new SqlParameter("@addressId", 182);
var createdByUserId = new SqlParameter("@createdByUserId", 1620);
var parameters = new[] {addressId, createdByUserId};
var result = context.Address.FromSql(procName, parameters).ToList();
}
Этот код не работает, так как в нем говорится, что для процедуры требуется "@createdByUserId", который не был предоставлен - он пытается сопоставить созданныйByUserId с @city, а затем не имеет значения для сопоставления с @ madeByUserId.
Если я пытаюсь определить параметр @city со значением null, в нем говорится, что для процедуры @ city требуется ненулевое значение.
Если я пытаюсь явно добавить список параметров, используя только @addressId и @createdByUserId, он заявляет, что в нем отсутствует ненулевой @ city.