C# 在实体框架中调用TVF

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中,一切正常,但在实体框架中则不然 我使用数据库优先方法和导入表值函数创建一个实体。现在我想这样使用这个函数

我在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中,一切正常,但在实体框架中则不然

我使用数据库优先方法和导入表值函数创建一个实体。现在我想这样使用这个函数:

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)
    。然后 您必须使用另一个var
    NVARCHAR(50)
    来转换此变量。您的函数必须如下所示:
  • 创建函数fn_SearchTitle(@q AS NVARCHAR(50)) 返回@auxTable表(广告ID int,标题nvarchar(50)) 开始 声明@auxQ varchar(150)=转换(varchar(150),@q) 插入@auxTable 从广告中选择广告ID、标题 其中FREETEXT([标题],@auxQ); 返回 结束 2-修改EF功能:

    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 +"')");