自定义SQL函数和Code First(EF 4.1)

ale*_*xey 8 .net entity-framework entity-framework-4.1

我正在使用Entity Framework 4.1 RC和代码第一种方法. 如何调用自定义SQL函数?

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

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

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

类型"..."上的指定方法"..."无法转换为LINQ to Entities存储表达式.

Lad*_*nka 8

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

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

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

  • 嗯...这是一个糟糕的限制.代码首先比EDMX模型更清晰,遗憾的是他们没有在两者中实现这些功能.它们允许您指定自定义数据库初始化代码,因此即使记住代码第一模型,包含它也是有意义的.叹... (11认同)