ef-code-first - Entity Framework 5、代码优先、全文搜索但可通过 CreateQuery 查询?

标签 ef-code-first full-text-search iqueryable createquery

我正在使用 .NET 4.5 和 EF 5 以及 Code First 方法,现在我需要实现全文搜索。 我已经阅读了很多相关内容,到目前为止我的结论是:

  • 存储过程和表值函数不能用 Code First 映射。

  • 我仍然可以使用动态 sql 调用它们

    dbContext.Database.SqlQuery(Sql,参数)

但是这会返回 IEnumerable 并且我想要 IQueryable 以便我可以在从数据库服务器获取数据之前进行更多过滤。我知道我可以将这些参数发送到 Db 函数,但我不想这样。

  • 我发现可以满足我需求的是来自 IObjectContextAdapter 的 CreateQuery 函数,它看起来像这样(全选只是为了测试):

    IQueryable 结果 = ((IObjectContextAdapter)dbContext).ObjectContext.CreateQuery("SELECT * FROM Movie");

  • 但是执行这个会抛出异常" 'System.Data.EntitySqlException 未处理 HResult=-2146232006 Message=查询语法无效。近期“*”,第 1 行,第 9 列。'

所以问题是:

  • 为什么会出现此异常,是否可以修复?

  • 如果没有,Code First 是否有任何方法可以执行返回 IQueryable 的 FTS?

最佳答案

这样试试

ObjectQuery<Movie> query = 
    objectContext.CreateQuery<Movie>(@"SELECT VALUE movie FROM Movies");  

至于为什么请看这些链接

Differences from Transact-SQL Unlike Transact-SQL, Entity SQL does not support use of the * argument in the SELECT clause. Instead

Entity SQL Reference - SELECT
"SELECT VALUE" - value keyword in LINQ/Entity Framework query

关于ef-code-first - Entity Framework 5、代码优先、全文搜索但可通过 CreateQuery 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16134193/

相关文章:

c# - 首先附加现有数据库 Entity Framework 代码时出错

c# - Code First 和 DBContext 的多态性

c# - 哪个 sql server 版本最适合首先使用实体​​框架代码快速保存数据?

mysql - 带有附加位置的全文搜索

mysql - 全文索引无法正常工作

c# - 如果 IQueryable<T> 继承 IEnumerable<T> ,那么 IQueryable<T> 为什么是 LINQ to SQL?

ef-code-first - XML 数据类型

Vim 搜索和删除 (:g/string/d) but that asks permission?

c# - 如何使用表达式树过滤包含可为空类型的 IQueryable?

c# - AsQueryable() 的目的是什么?