在Entity Framework ADO.NET实体数据模型中导入SQL Server函数时出现错误

3
我的项目基于ADO.NET Entity Data Model,我使用Entity Framework 6.0。当我在项目中导入函数时,出现了以下错误:
错误6046:无法生成存储函数“fn_PWDCOMPARE”的返回类型。将忽略存储函数并且不会生成函数导入。
如果我导入一个过程,就不会出现此错误。要导入的函数是:
CREATE FUNCTION fn_PWDCOMPARE (@pwd NVARCHAR(MAX),@pwdhash NVARCHAR(MAX))
RETURNS BIT
BEGIN
  RETURN PWDCOMPARE(@pwd, @pwdhash)
END
1个回答

2

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

创建一个文件,其中包含与您的DB模型相同的[命名空间]上的[partial class],以及您相同的模型上下文名称。并添加以下代码:

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(pass, hash);


有没有一种方法可以抑制编译器警告错误6046? - B2K

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接