找不到 CLR 类型 'SqlParameter' 到关系类型的映射
No mapping to a relational type can be found for the CLR type 'SqlParameter'
当尝试在 EntityFrameworkCore (2.2) 上执行带有命名参数的 SQL 请求时,出现以下异常:
InvalidOperationException: No mapping to a relational type can be found for the CLR type 'SqlParameter'.
我尝试过但效果不理想的方法:
原始 SQL 请求:
有效但不安全
未命名参数:
也可以,但不太明确 imo
await context.Database.ExecuteSqlCommandAsync(
"UPDATE dbo.Table SET ActivationDate = @p0, SubscriptionEndTime = @p1 WHERE SerialNumber IN (@p2) AND UserId = @p3;",
DateTime.UtcNow,
DateTime.UtcNow.AddYears(1),
string.Join("','", eqs.Select(e => e.SerialNumber)),
user.Id);
什么不起作用:
- 传递一组 SqlParameters 或对象
这是我的代码:
await context.Database.ExecuteSqlCommandAsync(
"UPDATE dbo.Table SET ActivationDate = @actDate, SubscriptionEndTime = @endDate WHERE SerialNumber IN (@serials) AND UserId = @userId;",
new SqlParameter("@actDate", DateTime.UtcNow),
new SqlParameter("@endDate", DateTime.UtcNow.AddYears(1)),
new SqlParameter("@serials", string.Join("','", eqs.Select(e => e.SerialNumber))),
new SqlParameter("@userId", user.Id));
我不明白为什么它不起作用,因为根据文档 (link):
This allows you to use named parameters in the SQL query string. context.Database.ExecuteSqlCommandAsync("UPDATE dbo.Posts SET Rating = 5 WHERE Author = @author", new SqlParameter("@author", userSuppliedAuthor));
那么如何在我的请求中使用命名参数?
编辑:
我不认为问题出在请求本身。
以下一个导致完全相同的异常:
await context.Database.ExecuteSqlCommandAsync(
"UPDATE dbo.Table SET Name = @name WHERE SerialNumber = 'XXXX'",
new SqlParameter("@name", "testing"));
找到我的解决方案...
导入的 SqlParameter 来自命名空间:
Microsoft.Azure.Documents.SqlParameter
正确的是:
System.Data.SqlClient.SqlParameter
当尝试在 EntityFrameworkCore (2.2) 上执行带有命名参数的 SQL 请求时,出现以下异常:
InvalidOperationException: No mapping to a relational type can be found for the CLR type 'SqlParameter'.
我尝试过但效果不理想的方法:
原始 SQL 请求: 有效但不安全
未命名参数: 也可以,但不太明确 imo
await context.Database.ExecuteSqlCommandAsync(
"UPDATE dbo.Table SET ActivationDate = @p0, SubscriptionEndTime = @p1 WHERE SerialNumber IN (@p2) AND UserId = @p3;",
DateTime.UtcNow,
DateTime.UtcNow.AddYears(1),
string.Join("','", eqs.Select(e => e.SerialNumber)),
user.Id);
什么不起作用:
- 传递一组 SqlParameters 或对象
这是我的代码:
await context.Database.ExecuteSqlCommandAsync(
"UPDATE dbo.Table SET ActivationDate = @actDate, SubscriptionEndTime = @endDate WHERE SerialNumber IN (@serials) AND UserId = @userId;",
new SqlParameter("@actDate", DateTime.UtcNow),
new SqlParameter("@endDate", DateTime.UtcNow.AddYears(1)),
new SqlParameter("@serials", string.Join("','", eqs.Select(e => e.SerialNumber))),
new SqlParameter("@userId", user.Id));
我不明白为什么它不起作用,因为根据文档 (link):
This allows you to use named parameters in the SQL query string. context.Database.ExecuteSqlCommandAsync("UPDATE dbo.Posts SET Rating = 5 WHERE Author = @author", new SqlParameter("@author", userSuppliedAuthor));
那么如何在我的请求中使用命名参数?
编辑:
我不认为问题出在请求本身。 以下一个导致完全相同的异常:
await context.Database.ExecuteSqlCommandAsync(
"UPDATE dbo.Table SET Name = @name WHERE SerialNumber = 'XXXX'",
new SqlParameter("@name", "testing"));
找到我的解决方案...
导入的 SqlParameter 来自命名空间:
Microsoft.Azure.Documents.SqlParameter
正确的是:
System.Data.SqlClient.SqlParameter