加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

.net – 自定义SQL函数和代码优先(EF 4.1)

发布时间:2020-12-12 06:27:21 所属栏目:MsSql教程 来源:网络整理
导读:我正在使用Entity Framework 4.1 RC和代码第一种方法. 如何调用自定义SQL函数? 如果我使用EdmFunction属性,我应该指定什么命名空间? [EdmFunction("Namespace","GetAge")] public static int GetAge(Person p) { throw new NotSupportedException(…); } 当
我正在使用Entity Framework 4.1 RC和代码第一种方法.
如何调用自定义SQL函数?

如果我使用EdmFunction属性,我应该指定什么命名空间?

[EdmFunction("Namespace","GetAge")] 
public static int GetAge(Person p) 
{  
    throw new NotSupportedException(…); 
}

当我尝试使用此类函数执行LINQ查询时,抛出以下异常:

The specified method ‘…’ on the type
‘…’ cannot be translated into a LINQ to
Entities store expression.

解决方法

如果要调用SQL函数,则必须执行自定义SQL查询.为此,请使用context.Database.SqlQuery.实体框架支持存储过程的映射,但DbContext API(EF 4.1)不支持此功能.如果要调用存储过程,则必须再次使用context.Database.SqlQuery. Linq查询中永远不能使用存储过程.

EdmFunction是ObjectContext API和Entity设计器的特性.命名空间设置为EDMX文件中定义的命名空间.使用代码优先时,您没有EDMX文件,也无法定义函数映射.

顺便说一句.如果您遵循代码第一种方法,则不应该有任何存储过程或SQL函数,因为数据库是由模型(代码)定义并由实体框架生成的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读