将 Guid 传递给存储过程会引发 Microsoft.Data.SqlClient.SqlException: 'Incorrect syntax near '@Id'。
Passing Guid to stored procedure throws Microsoft.Data.SqlClient.SqlException: 'Incorrect syntax near '@Id'.'
我有一个这样的存储过程:
CREATE PROCEDURE [Owner].GetById
@LanguageCode CHAR(5) = 'en-us',
@Id UNIQUEIDENTIFIER
AS
BEGIN
SELECT ...
WHERE LanguageCode = @LanguageCode
AND Id = @Id;
END
我正在尝试使用 Entity Framework 核心来调用存储过程:
var param1 = new SqlParameter ("@LangaugeCode", "en-us");
var param2 = new SqlParameter ("@Id", System.Data.SqlDbType.UniqueIdentifier);
param2.Value = Guid.Parse("0ec0d169-0a4f-4458-a48b-729e1bb0fea9");
var context = new localContext(); // Auto-generated class for DB first approach
var manufacturers= context.Owner.FromSqlRaw($"EXEC Owner.GetById
@LanguageCode, @Id", param1, param2).ToList();
它抛出一个错误:
Microsoft.Data.SqlClient.SqlException: 'Incorrect syntax near '@Id'.'
发生这种情况是因为 Guid 不能作为 UNIQUEIDENTIFIER 传递还是格式问题?
你能从
中更改查询吗
FromSqlRaw($"EXEC Owner.GetById @LanguageCode @Id", param1, param2).ToList();
收件人:
FromSqlRaw($"EXEC Owner.GetById {0}, {1}", param1, param2).ToList();
我认为您需要以下之一:
var p1 = "en-us";
var p2 = Guid.Parse("0ec0d169-0a4f-4458-a48b-729e1bb0fea9");
var owners= context.Owner.FromSqlRaw(
"Owner.GetById {0}, {1}",
p1,
p2
}.ToList();
var owners= context.Owner.FromSqlInterpolated(
$"Owner.GetById {p1}, {p2}").ToList();
你可以做到这一点。你不需要 EXEC
.
FromSqlRaw($"Owner.GetById {0}, {1}", p1, p2)
我有一个这样的存储过程:
CREATE PROCEDURE [Owner].GetById
@LanguageCode CHAR(5) = 'en-us',
@Id UNIQUEIDENTIFIER
AS
BEGIN
SELECT ...
WHERE LanguageCode = @LanguageCode
AND Id = @Id;
END
我正在尝试使用 Entity Framework 核心来调用存储过程:
var param1 = new SqlParameter ("@LangaugeCode", "en-us");
var param2 = new SqlParameter ("@Id", System.Data.SqlDbType.UniqueIdentifier);
param2.Value = Guid.Parse("0ec0d169-0a4f-4458-a48b-729e1bb0fea9");
var context = new localContext(); // Auto-generated class for DB first approach
var manufacturers= context.Owner.FromSqlRaw($"EXEC Owner.GetById
@LanguageCode, @Id", param1, param2).ToList();
它抛出一个错误:
Microsoft.Data.SqlClient.SqlException: 'Incorrect syntax near '@Id'.'
发生这种情况是因为 Guid 不能作为 UNIQUEIDENTIFIER 传递还是格式问题?
你能从
中更改查询吗FromSqlRaw($"EXEC Owner.GetById @LanguageCode @Id", param1, param2).ToList();
收件人:
FromSqlRaw($"EXEC Owner.GetById {0}, {1}", param1, param2).ToList();
我认为您需要以下之一:
var p1 = "en-us";
var p2 = Guid.Parse("0ec0d169-0a4f-4458-a48b-729e1bb0fea9");
var owners= context.Owner.FromSqlRaw(
"Owner.GetById {0}, {1}",
p1,
p2
}.ToList();
var owners= context.Owner.FromSqlInterpolated(
$"Owner.GetById {p1}, {p2}").ToList();
你可以做到这一点。你不需要 EXEC
.
FromSqlRaw($"Owner.GetById {0}, {1}", p1, p2)