SqlFunctions和EntityFunctions有什么区别?

时间:2013-03-26 12:40:04

标签: c# entity-framework

有什么区别? 在获取数据并将它们存储在内存中之前,它们是否都用于在sql端执行函数?

P.S:
两者都用于linq中。

4 个答案:

答案 0 :(得分:16)

正如文档所述EntityFunctions

  

提供公开语言运行时(CLR)方法,公开概念   LINQ to Entities查询中的模型规范函数。有关信息   关于规范函数,请参阅Canonical Functions(Entity SQL)。

其中Canonical functions

  

受所有数据提供程序支持,并且可供所有查询使用   技术。规范函数不能由提供者扩展。   这些规范函数将被转换为相应的数据   提供者的源功能。这允许功能   调用以数据源的通用形式表示。

SQLFunctions

  

提供调用函数的公共语言运行时(CLR)方法   LINQ to Entities查询中的数据库。

因此,尽管两组函数都被转换为本机SQL,但SQLFunctions是SQL Server特定的,而EntityFunctions则不是。

答案 1 :(得分:5)

正如我读到的那样。 CLR将EntityFunctions函数转换为所有数据提供者都支持的“规范函数”。

但是SqlFunction使 SQL Server 能够完成工作,并且只为SQL Server指定了。

For more information

答案 2 :(得分:4)

SqlFunctions是EF4中引入的静态类,位于程序集System.Data.Entity中。它包含一长串方法列表,如Cos, DateAdd, DateDiff, DatePart, GetDate, Exp, Sign,它们映射到SQL Server函数。可以在LINQ to Entities查询中调用这些静态函数。

enter image description here

EF4还引入了静态EntityFunctions类。此类公开概念模型规范函数,可以在LINQ to Entities查询中使用。这些函数映射到System.Data.Metadata.Edm命名空间中的函数,它们仅在概念模型中可用。

enter image description here

有关详情,请点击here

答案 3 :(得分:2)

如果有人遇到过这篇旧帖子,System.Data.Entity.EntityFunctions现已过时并被System.Data.Entity.DbFunctions取代。