我试图使用实体框架在我的linq语句中调用用户定义的sql函数。该函数名为GetXml
,并带有2个名为“data”和“path”的字符串并返回一个字符串。我的数据模型称为XmlDataModel
。我将函数定义包含在edmx文件中,如下所示:
<Function Name="GetXml" ReturnType="varchar(max)" Schema="dbo">
<Parameter Name="path" Type="varchar(max)" Mode="In" />
<Parameter Name="data" Type="varchar(max)" Mode="In" />
</Function>
我的代码中有以下方法声明:
[EdmFunction("XmlDataModel.Store", "GetXml")]
public string GetXml(string path, string data)
{
throw new NotSupportedException("This method can only be used in a LINQ-toEntities query");
}
以下linq声明:
var test = from e in this.ObjectContext.Events
where GetXml("a", "b") == "test" select e.EventSpecificData;
我的问题是,当我尝试查看结果集时,收到以下消息:
指定的方法'System.String GetXml(System.String, System.String)'在类型'RIAServicesLibrary1.Web.XmlDomainService'上 无法转换为LINQ to Entities存储表达式,因为 调用它的实例不是ObjectContext 评估使用它的查询。
似乎认识到我已经定义了方法,因为当我取出[EdmFunction]
标签时,我得到了不同的消息。有什么想法吗?