如何在esql查询中获取实体类型的名称

时间:2012-07-02 23:37:22

标签: entity-framework-4 entity-sql

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

问题是这样,我们有一个通用的帮助器,它构建并运行一个esql语句来返回一个传递给MVC3应用程序上的SelectList的结果。

text列是从添加到模型属性的属性中获取的表达式。

例如,如果我们希望下拉列表将人名列为Last,首先我们添加一个带有表达式的属性:'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

有没有人知道如何实现这个目标?

1 个答案:

答案 0 :(得分:0)

我忘了回头再回答这个问题。我们最终选择的解决方案不是很优雅,但它为我们提供了所需的所有功能。

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

现在我们可以这样做:

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