2

我想知道是否有一种方法可以使用实体框架来映射任意 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
       ....
    }
4

1 回答 1

1

如果您使用 .EDMX 文件(设计器)和数据库优先方法,您可以将存储过程导入模型(只需在向导中选择存储过程)并将其结果映射到复杂类型

它实际上也适用于任意 SQL 查询,但这些查询不能自动导入到模型中(因为它们不存在于您的数据库中)。它需要手动修改 EDMX 文件中的存储模型(它是 XML - 检查文档FunctionCommandText元素)。一旦你这样做了,你就不能再使用设计器的数据库功能更新,因为它会删除你的自定义查询。

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

于 2012-12-27T12:22:19.960 回答