我在用着实体框架 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(使用前将#替换为@)