我有一个存储过程,它会返回一个 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);
}
我收到了许多错误信息。
Error #1: 使用以上代码,var result
始终设置为 -1。
Error #2: 我尝试导航到 Edit Function Import
并将 Returns a Collection Of
设置为一个 Boolean
标量值。这会抛出以下错误:
由存储数据提供程序返回的数据读取器没有足够的列用于请求的查询。
Error #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
中推导出有用的数据。尝试将result
转换为bool
会抛出以下错误:
你有什么办法可以查看存储过程的结果(无法将类型'System.Data.Entity.Infrastructure.DbRawSqlQuery'转换为'bool'
0
或1
)吗?