我在一个edmx1文件中有FunctionImport,我想将ReturnType设置为位于其他edmx2文件中的对象。
例如,我有edmx1文件,其中包含以下FunctionImport和edmx1文件中定义的t_Page对象
edmx1
<FunctionImport Name="CopySite" EntitySet="t_Page" ReturnType="Collection(Entities.t_Page)">
<Parameter Name="assemblyId" Mode="In" Type="Int32" />
<Parameter Name="projectId" Mode="In" Type="Int32" />
</FunctionImport>
现在,我想更改ReturnType,因此它将返回c_Page
(在edxm2中声明)而不是t_Page
。如果我只是在edmx1中将t_Page
更改为c_Page
,我会收到错误c_Page
未在edmx中定义
<FunctionImport Name="CopySite" EntitySet="c_Page" ReturnType="Collection(Entities.c_Page)">
<Parameter Name="assemblyId" Mode="In" Type="Int32" />
<Parameter Name="projectId" Mode="In" Type="Int32" />
</FunctionImport>
我怎么能这样做?
已更新
我需要这个的原因是: 我有几个具有不同表的DB,除了其中5个具有相同方案但每个DB中具有不同名称的表(例如c_Page,d_Page,e_Page ...)。它必须有不同的名字!现在,当我为每个数据库创建edmx时,我不想拥有数百个“相同”类,因为它们都具有相同的方案但名称不同,所以我希望将相同的类映射到所有这些表
也许我需要实体框架4“代码优先”?但是这样我需要手动创建类,对吧?
你能建议我怎么做吗?
答案 0 :(得分:0)
这通常是不可能的。您只能使用在同一EDMX文件中定义的类型。
this article中描述了唯一可以实现此目的的情况,您可以在其中包含一个CSDL文件。这将允许您在一个CSDL文件中定义实体,并将该CSDL文件包含在第二个EDMX中,您可以在其中定义FunctionImport,并希望也使用该实体(我没有测试过它)。但它有一些后果:
编辑:
因此,根据您的编辑,您必须在每个EDMX中定义实体 - 如何避免这种情况。如果确保每个EDMX中的实体完全相同(包括:名称,键,属性名称,关系),则可以修改用于生成类的T4模板,以便只生成一个模板。之后,您需要确保模板生成的ObjectContext
派生类在其公开集中使用正确的类。这完全是关于T4模板的一些修改。