【问题标题】:Find the Name of Objects referenced in IQueryable and IEnumerable in ENtity Framework在实体框架中查找 IQueryable 和 IEnumerable 中引用的对象的名称
【发布时间】:2011-12-31 23:25:27
【问题描述】:

我正在创建一个通用函数,其函数定义为:

  public static List<T> Func_IEnumerable<T>(this IEnumerable<T> q, ObjectContext dc, string CacheId)

和一个功能

  public static List<T> Func_IQueryable<T>(this IQueryable<T> q, ObjectContext dc, string CacheId)

问题是我想找出 Ienumerable 或 IQueryable 查询中引用的表名、过程名、函数名和/或视图名

Linq 框架可以吗

如果不是,那么我们可以将 IEnumerable 转换为 System.Data.Objects.ObjectQuery,最后使用 ToTraceString 得到纯 SQL。

现在我们可以从 Pure Sql 中获取对象名称了。

Sql Server 是否有一些函数可以做同样的事情,如果没有,那么我应该如何解析它以获得所需的结果。

谢谢,

感谢任何帮助。

【问题讨论】:

  • 这里似乎涉及两个部分:遍历查询以查找所有引用的实体,并从相应的实体中提取信息。两者听起来都不是简单的问题。你能不能只看映射/“模型”,或者使用 SQL Server 分析?
  • 为什么要获取表名/函数名?
  • @ Merlyn Morgan-Graham 我想在 ASP.NET(通知服务)中实现 SqlCacheDepenedency。我将传递要缓存的查询,然后在这个函数中,我将创建所有引用对象的 SqlCacheDependencies。现在对于 SqlCacheDepenedency,我们需要一个 SqlCommand。现在我可以使用纯 sql 或对象查询创建 SqlCommand 来跟踪字符串
  • @Eranga 我想在 ASP.NET(通知服务)中实现 SqlCacheDepenedency。我将传递要缓存的查询,然后在这个函数中,我将创建所有引用对象的 SqlCacheDependencies。现在对于 SqlCacheDepenedency,我们需要一个 SqlCommand。现在我可以使用纯 sql 或对象查询创建 SqlCommand 来跟踪字符串

标签: c# asp.net sql-server linq entity-framework-4


【解决方案1】:

如果你想使用SqlCacheDependency(功能严重依赖SQL),你为什么首先使用EF(试图尽可能隐藏SQL的功能)?您正在组合两个原本无法协同工作的功能 - 这在 .NET 框架中经常发生。

IQueryable 只能在对象为ObjectQuery 时转换为ObjectQuery = 它是作为对公开的ObejctSet 的查询而创建的,并且您从未在其上调用过ToListAsEnumerable 或其他执行方法.这也意味着对存储过程的调用不能转换为ObjectQuery

真正的IEnumerable(已执行查询)无法转换为ObjectQuery,并且您无法从IEnumerable 获得有关结果集来源的任何信息。这适用于所有调用 ToListAsEnumerable 的查询,例如所有对映射存储过程的调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多