gpt4 book ai didi

c# - 无法使用 Entity Framework 6 获取存储过程结果

转载 作者:太空狗 更新时间:2023-10-29 23:43:53 24 4
gpt4 key购买 nike

我有一个返回 0 的存储过程或 1取决于我的数据库中是否存在指定的电子邮件地址:

CREATE PROCEDURE [DatabaseSchema].[EmailAddressIsDuplicate] (@emailAddress nvarchar(255))
AS
BEGIN
SET NOCOUNT ON;

IF EXISTS(
SELECT *
FROM [DatabaseSchema].[EmailUpdatesRegistrant]
WHERE EmailAddress = @emailAddress
)
RETURN 1
ELSE
RETURN 0

RETURN 0
END

GO

我正在尝试从 Entity Framework 6 数据库上下文中导出此存储过程的结果:

using (DatabaseContext dbContext = new DatabaseContext())
{
ObjectParameter param = new ObjectParameter("emailAddress", typeof(bool));
var result = dbContext.EmailAddressIsDuplicate(emailAddress);
}

我遇到了很多错误。

错误#1:使用上面的代码,var result始终设置为 -1。

错误 #2: 我尝试导航到 Edit Function Import并设置 Returns a Collection OfBoolean标量值。这会引发以下错误:

The data reader returned by the store data provider does not have enough columns for the query requested.

错误 #3: 我返回并设置了 Edit Function Import返回值 None .然后我从这个答案中尝试了以下代码:

using (DatabaseContext dbContext = new DatabaseContext())
{
var p = new SqlParameter("@emailAddress", emailAddress);
var result = dbContext.Database.SqlQuery<bool>("DatabaseSchema.EmailAddressIsDuplicate", p);
}

没有立即抛出错误,但我不知道我是否可以从 var result 中获取有用的数据.尝试投 resultbool抛出以下错误:

Cannot convert type 'System.Data.Entity.Infrastructure.DbRawSqlQuery' to 'bool'

关于如何查看此存储过程(01)的结果有什么想法吗?

最佳答案

您可以尝试在存储过程签名中添加输出参数 (@result):

CREATE PROCEDURE [DatabaseSchema].[EmailAddressIsDuplicate]
(@emailAddress nvarchar(255), @result bit out)
AS
BEGIN
SET NOCOUNT ON;

IF EXISTS(SELECT *
FROM [DatabaseSchema].[EmailUpdatesRegistrant]
WHERE EmailAddress = @emailAddress)
SET @result = 1
ELSE
SET @result = 0

RETURN @result
END
GO

(您必须相应地重新定义您的 EF 模型函数定义)

using (DatabaseContext dbContext = new DatabaseContext())
{
ObjectParameter isDuplicate = new ObjectParameter("isDuplicate", typeof(bool));
var result = dbContext.EmailAddressIsDuplicate(emailAddress, isDuplicate);

bool emailIsDuplicate = (bool)isDuplicate.Value;.
}

如果您想直接使用 out 参数调用存储过程,您可以遵循以下建议: Database.SqlQuery calling stored procedure that has multiple output parameters

关于c# - 无法使用 Entity Framework 6 获取存储过程结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39415493/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com