我首先使用实体框架代码来查询数据库, 问题是我不允许在数据库中创建视图, 所以我应该在我的代码中使用查询脚本。我想通过实体框架将此查询脚本视为与DBSet或IQueryable相同,以便我可以对其应用linq查询。 我不希望它是IEnumerable,因此'Database.SqlQuery'对我不起作用。
例如: db中有Product表,其中包含{Id,Name,CategoryId} db中有Category表,其中包含{Id,Name}
我的查询脚本是这样的:
select Id,Name,CategoryId,CategoryName
from Product p
join Category c on p.CategoryId=c.Id
我想在我的代码中使用此查询,就好像它是一个视图。
有什么想法吗?
ps:查询脚本非常复杂,我无法用Linq构建它。
我使用Interceptor 解决了这个问题, 这是解决方案:
在您的上下文中创建一个Dbset,如下所示:
public DbSet<Model.MyView> MyViews { get; set; }
创建DbCommandInterceptor,并将其应用于您的实体框架配置
在Interceptor中实现此方法:
public void ReaderExecuting(DbCommand command, DbCommandInterceptionContext<DbDataReader> interceptionContext)
,并修改命令文本,如下所示:
command.CommandText = command.CommandText.Replace("[dbo].[MyViews]", "(" + MyViewScript + ")");
答案 0 :(得分:0)
您可以使用EF执行原始SQL查询:
https://msdn.microsoft.com/en-us/library/jj592907(v=vs.113).aspx