ale*_*lex 5 c# sql-server stored-procedures entity-framework entity-framework-6
我有一个存储过程,该存储过程根据数据库中是否存在指定的电子邮件地址返回一个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
Run Code Online (Sandbox Code Playgroud)
我正在尝试从Entity Framework 6数据库上下文派生此存储过程的结果:
using (DatabaseContext dbContext = new DatabaseContext())
{
ObjectParameter param = new ObjectParameter("emailAddress", typeof(bool));
var result = dbContext.EmailAddressIsDuplicate(emailAddress);
}
Run Code Online (Sandbox Code Playgroud)
我遇到很多错误。
错误1:使用上述代码,var result
始终设置为-1。
错误2:我尝试导航到Edit Function Import
并将其设置Returns a Collection Of
为Boolean
标量值。这将引发以下错误:
商店数据提供者返回的数据读取器没有足够的列用于请求的查询。
错误#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);
}
Run Code Online (Sandbox Code Playgroud)
没有立即引发错误,但是我不知道是否可以从中获取有用的数据var result
。尝试投放result
到bool
引发以下错误:
无法将类型'System.Data.Entity.Infrastructure.DbRawSqlQuery'转换为'bool'
关于如何查看此存储过程(0
或1
)结果的任何想法?
@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
Run Code Online (Sandbox Code Playgroud)
(您必须相应地重新定义 EF 模型函数定义)
using (DatabaseContext dbContext = new DatabaseContext())
{
ObjectParameter isDuplicate = new ObjectParameter("isDuplicate", typeof(bool));
var result = dbContext.EmailAddressIsDuplicate(emailAddress, isDuplicate);
bool emailIsDuplicate = (bool)isDuplicate.Value;.
}
Run Code Online (Sandbox Code Playgroud)
如果您想直接使用输出参数调用存储过程,您可以遵循以下建议: Database.SqlQuery 调用具有多个输出参数的存储过程
归档时间: |
|
查看次数: |
3364 次 |
最近记录: |