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

2024-01-11

我在用着实体框架 4.1 RC和代码优先方法。如何调用自定义 SQL 函数?

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

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

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

类型上指定的方法“...” '...' 无法翻译为 LINQ to 实体存储表达式。


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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自定义 SQL 函数和 Code First (EF 4.1) 的相关文章

随机推荐