Entity Framework: передача строкового параметра в оператор From Sql в версии 2.2 - PullRequest
3 голосов
/ 19 июня 2020

Я пытаюсь передать строковый параметр в запрос SQL, ошибка получения ниже. Как я могу это решить? В настоящее время используется ответ EF Core 2.2, передача строкового параметра в From Sql Statement

Входная строка имеет неправильный формат.

public async Task<IEnumerable<Product>> GetProduct(string productKey)
{
    var productParameter = new SqlParameter("@productKey", SqlDbType.VarChar);
    productParameter.Value = productKey;

    var productIdList = db.TestDb
        .FromSql($"select ProductId from dbo.Product product" +
            "   (where product.ProductKey = {productParameter})" )
            .Select(c => c.ProductId).ToList();

Это тип varchar (6) из ProductKey

Использование Net Core 2.2

Ответы [ 3 ]

5 голосов
/ 19 июня 2020

Если вы используете FromSql, вы должны построить свой код таким образом, чтобы правильно применить SqlParameter:

var productIdList = db.TestDb
    .FromSql($"select ProductId from dbo.Product product where product.ProductKey = @productKey",productParameter )
    .Select(c => c.ProductId).ToList();

В зависимости от версии EF, которую вы используете, вы также можете использовать FromSqlInterpolated вместо FromSql и покончить с высотой SqlParameter.

1 голос
/ 19 июня 2020

Это может помочь:

var productParameter = new SqlParameter("@productKey", productKey);

var productIdList = db.TestDb
    .FromSql("select ProductId from dbo.Product where ProductKey = @productParameter",productParameter )
    .ToList();
1 голос
/ 19 июня 2020

1) Запрос неверен: у вас нет оператора FROM, который является обязательным. Я предполагаю, что вам нужно что-то вроде

select productKey 
from dbo.Product product 
where product.Product = <paramName>

2) При использовании From SQL: в строке запроса вы должны ввести имя параметра, а не экземпляр. Поэтому замените {productParameter} на @ productKey

3) Передайте экземпляр SqlParameter в качестве второго аргумента методу From Sql.

var productParameter = new SqlParameter("@productKey", SqlDbType.VarChar);
productParameter.Value = productNumber;     

var product= db.Tra
    .FromSql($@"
        select productKey 
        from dbo.Product product 
        where product.ProductKey = {productParameter.Name}", productParameter);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...