C# 在实体框架中调用TVF
我在SQL Server中有一个表值函数,我想从EF调用它 SQL Server代码:C# 在实体框架中调用TVF,c#,sql,sql-server,entity-framework,C#,Sql,Sql Server,Entity Framework,我在SQL Server中有一个表值函数,我想从EF调用它 SQL Server代码: CREATE FUNCTION fn_SearchTitle(@q AS NVARCHAR(50)) RETURNS TABLE AS RETURN (SELECT * FROM Advertise WHERE FREETEXT([Title], @q)); 在SQL Server中,一切正常,但在实体框架中则不然 我使用数据库优先方法和导入表值函数创建一个实体。现在我想这样使用这个函数
CREATE FUNCTION fn_SearchTitle(@q AS NVARCHAR(50))
RETURNS TABLE
AS
RETURN
(SELECT * FROM Advertise
WHERE FREETEXT([Title], @q));
在SQL Server中,一切正常,但在实体框架中则不然
我使用数据库优先方法和导入表值函数创建一个实体。现在我想这样使用这个函数:
using (var context = new testEntities())
{
var res = context.fn_SearchTitle("iphone");
foreach (var result in res)
{
Console.WriteLine(result.Title);
}
}
此代码引发以下异常:
mscorlib.dll中发生类型为“System.Data.Entity.Core.EntityCommandExecutionException”的未处理异常
详情:
全文查询字符串的全文查询参数无效
异常详细信息:System.Data.SqlClient.SqlException:全文查询字符串的全文查询参数无效
有人能帮我吗
谢谢,这是字符串长度的问题。 您有两种选择:
@q
必须是varchar(MAX)
。然后
您必须使用另一个varNVARCHAR(50)
来转换此变量。您的函数必须如下所示:return ((IObjectContextAdapter)this).ObjectContext.CreateQuery<YourType>("[YourEntities].[fn_SearchTitle]('" + q +"')");
返回((IObjectContextAdapter)this.ObjectContext.CreateQuery(“[YourEntities].[fn_SearchTitle](“+q+”)”)”;
应该有内部异常,异常中有消息。你能把它贴出来吗?谢谢你的评论。例外情况的细节添加到帖子中。4年后,问题仍然存在。你是怎么解决的?
return ((IObjectContextAdapter)this).ObjectContext.CreateQuery<YourType>("[YourEntities].[fn_SearchTitle]('" + q +"')");