【问题标题】:How can I get the entity types' name in an esql query如何在 esql 查询中获取实体类型的名称
【发布时间】:2012-07-03 09:30:36
【问题描述】:

我们遇到了一个场景,我们需要能够在 esql 语句的结果中将实体类型的名称作为值返回。

问题在于,我们有一个通用的帮助器,它构建并运行一个 esql 语句以返回一个结果,该结果被传递到 MVC3 应用程序的 SelectList 中。

文本列是从添加到模型属性的属性中提取的表达式。

例如,如果我们希望下拉列表将人名列为姓氏,首先我们添加一个带有如下表达式的属性:'it.[LastName] + ", " + it.[FirstName]' 这会产生这样的语句:

SELECT it.[Id] AS Id, it.[LastName] + ", " + it.[FirstName] AS Name
FROM OfType([AuditedObject], [User]) AS it

我们遇到了一个涉及使用 TPT 的 EF4.3 中的抽象类型的场景。我们需要使用这个辅助方法枚举派生实体。当我们只需要这样的基本数据时,该方法会很好地枚举并返回所有派生实体:

SELECT it.[Id] AS Id, it.[Name] AS Name
FROM OfType([AuditedObject], [DatumObject]) AS it

但是我们需要一种方法来指示每个实体是什么类型。类似这样的伪代码:

SELECT it.[Id] AS Id, it.GetType().Name + " - " + it.[Name] AS Name
FROM OfType([AuditedObject], [DatumObject]) AS it

有没有人知道我如何做到这一点?

【问题讨论】:

    标签: entity-framework-4 entity-sql


    【解决方案1】:

    我之前忘了回过头来更新这个问题。我们最终采用的解决方案不是很优雅,但它为我们提供了我们需要的所有功能。

    我们最终在模型中添加了一个实体来表示根对象的类型,并通过单向关联将它们链接起来。然后,我们使用 t4 模板生成脚本以将类型填充到新表中,并添加业务逻辑以确保在调用 SaveChanges() 时对其进行设置。

    现在我们可以这样做了:

    SELECT it.[Id] AS Id, it.[EntityType].[Name] + " - " + it.[Name] AS Name
    FROM OfType([AuditedObject], [DatumObject]) AS it
    

    【讨论】:

      猜你喜欢
      • 2018-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多