我正在使用带有 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 吗?