我正在使用 .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/