EF自定义结果集映射

时间:2012-12-26 22:54:48

标签: c# entity-framework-5 objectcontext

我想知道是否有一种使用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
       ....
    }

1 个答案:

答案 0 :(得分:1)

如果您使用带有数据库优先方法的.EDMX文件(设计器),则可以将存储过程导入模型(只需在向导中选择存储过程)和map their results to complex types

它实际上也适用于任意SQL查询,但这些查询无法自动导入模型(因为它们在您的数据库中不存在)。它需要在EDMX文件中手动修改存储模型(它是XML - Function and CommandText elements的检查文档)。执行此操作后,您将无法再使用设计器的数据库更新功能,因为它会删除您的自定义查询。

如果您首先使用代码,则当前没有选项来映射存储过程或自定义查询的结果。您只能使用自动映射,该映射要求您的类具有与结果集中的列完全相同的属性。