在Entity Framework ADO中导入SQL Server功能出错.实体数据模型

本文关键字:功能 Server 出错 实体 数据模型 SQL 导入 Entity Framework ADO | 更新日期: 2023-09-27 17:51:12

我的项目是基于ADO。. NET实体数据模型,我使用实体框架6.0。

当我在我的项目中导入函数时,我收到了这个错误:

错误6046:无法生成存储函数'fn_PWDCOMPARE'的函数导入返回类型。存储函数将被忽略,并且不会生成函数导入。

如果我导入一个过程,我不会得到错误。

函数是:

CREATE FUNCTION fn_PWDCOMPARE (@pwd NVARCHAR(MAX),@pwdhash NVARCHAR(MAX))
RETURNS BIT
BEGIN
  RETURN PWDCOMPARE(@pwd, @pwdhash)
END

在Entity Framework ADO中导入SQL Server功能出错.实体数据模型

EF 6.1.3仍然不能为标量函数生成代码。也就是说,您可以扩展DbContext类并将自己的实现添加到函数中。之后,你可以像调用EF模型中的任何其他对象一样调用你的函数。

创建一个包含[部分类]的文件,该文件与您的DB模型在相同的[命名空间]上,并且具有相同的模型上下文名称。并添加以下代码:

public partial class YourDBContext : DbContext
{
    public System.Data.Entity.Core.Objects.ObjectContext AsObjectContext()
    {
        return (this as System.Data.Entity.Infrastructure.IObjectContextAdapter).ObjectContext;
    }
    [DbFunction("YourDBModel.Store", "fn_PWDCOMPARE")]
    public bool fn_PWDCOMPARE(string pwd, string pwdhash)
    {
        var paramList = new ObjectParameter[]
        {
            new ObjectParameter("pwd", pwd),
            new ObjectParameter("pwdhash", pwdhash)
        };
        return this.AsObjectContext().CreateQuery<bool>("YourDBModel.Store.fn_PWDCOMPARE", paramList).Execute(MergeOption.NoTracking).FirstOrDefault();
    }

然后从代码中调用这个新函数:

bool retVal = YourDBContext。fn_PWDCOMPARE(通过,哈希);