我想知道是否有一种使用Entity Framework的方法来映射来自任意sql的结果,比如Doctrine中的ResultSetMapping。我知道我可以创建一个配置类来执行映射,但这需要我将类注册为实体类型。 我想要做的是利用EF的物化元素(对象服务),而不使用EF的其余部分。有时候我会得到一个带有神秘或不太有意义的列名的proc的结果,但是需要映射到具有更有意义的属性名但没有权限来改变proc定义的类,例如:
exec dbo.getRecDetail @var
返回列:
sd, ed, nm, ....
应该映射到类,如:
class Obj{
public DateTime StartDate; //sd
public DateTime EndDate; //ed
public String Name; //nm
....
}
答案 0 :(得分:1)
如果您使用带有数据库优先方法的.EDMX文件(设计器),则可以将存储过程导入模型(只需在向导中选择存储过程)和map their results to complex types。
它实际上也适用于任意SQL查询,但这些查询无法自动导入模型(因为它们在您的数据库中不存在)。它需要在EDMX文件中手动修改存储模型(它是XML - Function
and CommandText
elements的检查文档)。执行此操作后,您将无法再使用设计器的数据库更新功能,因为它会删除您的自定义查询。
如果您首先使用代码,则当前没有选项来映射存储过程或自定义查询的结果。您只能使用自动映射,该映射要求您的类具有与结果集中的列完全相同的属性。