我们遇到了一个场景,我们需要能够将实体类型的名称作为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
有没有人知道如何实现这个目标?
答案 0 :(得分:0)
我忘了回头再回答这个问题。我们最终选择的解决方案不是很优雅,但它为我们提供了所需的所有功能。
我们最终向模型添加了一个实体来表示根对象的类型,并使用单向关联链接它们。然后,我们使用t4模板生成一个脚本,将类型填充到新表中,并添加业务逻辑,以确保在调用SaveChanges()时设置它。
现在我们可以这样做:
SELECT it.[Id] AS Id, it.[EntityType].[Name] + " - " + it.[Name] AS Name
FROM OfType([AuditedObject], [DatumObject]) AS it