3

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

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

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

    dbContext.Database.SqlQuery<电影>(Sql,参数)

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

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

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

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

所以问题是:

  • 为什么我会得到这个异常并且可以修复它?

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

4

1 回答 1

2

像这样试试

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

至于why看到这些链接

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

实体 SQL 参考 - SELECT
"SELECT VALUE" - LINQ/实体框架查询中的值关键字

于 2013-04-21T20:35:11.407 回答