【问题标题】:How to use query scripts as IQueryable or DBSet in Entity Framework如何在实体框架中将查询脚本用作 IQueryable 或 DBSet
【发布时间】:2017-10-02 08:42:00
【问题描述】:

我首先使用实体​​框架代码来查询数据库, 问题是我不允许在数据库中创建视图, 所以我应该在我的代码中使用查询脚本。我希望实体框架将此查询脚本视为与 DBSet 或 IQueryable 相同,以便我可以对其应用 linq 查询。 我不希望它是 IEnumerable 所以“Database.SqlQuery”对我不起作用。

示例: 数据库中有 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 解决了这个问题, 这是解决方案:

  1. 在您的上下文中创建一个 Dbset,如下所示: public DbSet<Model.MyView> MyViews { get; set; }

  2. 创建 DbCommandInterceptor,并将其应用于您的实体框架配置

  3. 在拦截器中实现这个方法: public void ReaderExecuting(DbCommand command, DbCommandInterceptionContext<DbDataReader> interceptionContext) ,并像这样修改命令文本: command.CommandText = command.CommandText.Replace("[dbo].[MyViews]", "(" + MyViewScript + ")");

【问题讨论】:

    标签: c# entity-framework iqueryable sql-scripts


    【解决方案1】:

    您可以使用 EF 执行原始 SQL 查询:

    https://msdn.microsoft.com/en-us/library/jj592907(v=vs.113).aspx

    【讨论】:

      猜你喜欢
      • 2014-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-10
      • 2022-01-06
      • 2016-12-21
      相关资源
      最近更新 更多