【问题标题】:Entity Framework 5, Code First, Full Text Search but IQueryable via CreateQuery?实体框架 5、代码优先、全文搜索但可通过 CreateQuery 查询?
【发布时间】:2013-04-21 17:40:08
【问题描述】:

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

  • 无法使用 Code First 映射存储过程和表值函数。

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

    dbContext.Database.SqlQuery(Sql,参数)

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

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

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

  • 但是执行此操作会引发异常” 'System.Data.EntitySqlException 未处理 H结果=-2146232006 Message=查询语法无效。近期'*',第 1 行,第 9 列。'

所以问题是:

  • 为什么会出现此异常,能否修复?

  • 如果没有,Code First 有什么方法可以执行返回 IQueryable 的 FTS 吗?

【问题讨论】:

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


【解决方案1】:

这样试试

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

至于why请看这些链接

与 Transact-SQL 的区别 与 Transact-SQL 不同,Entity SQL 没有 支持在 SELECT 子句中使用 * 参数。而是

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

【讨论】:

    猜你喜欢
    • 2012-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    • 2012-05-29
    相关资源
    最近更新 更多