在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
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(通过,哈希);