如何将 FunctionImport 的 ReturnType 设置为其他 edmx 文件中定义的对象?

发布于 2024-12-03 17:25:43 字数 1227 浏览 0 评论 0原文

我在一个 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>

我该如何执行此操作?

更新

我需要这个的原因是: 我有几个具有不同表的数据库,除了其中 5 个具有相同方案但每个数据库中名称不同的数据库(例如 c_Page、d_Page、e_Page...)。它必须有不同的名字!现在,当我为每个数据库创建 edmx 时,我不想拥有数百个“相同”类,因为它们都有相同的方案但名称不同,所以我想将相同的类映射到所有这些表

也许我需要实体框架4 “代码优先”?但这样我就需要手动创建类了,对吗?

你能建议我如何做到这一点吗?

I have FunctionImport in one edmx1 file and I want to set the ReturnType to object that is located in other edmx2 file.

for example, I have edmx1 file with following FunctionImport and t_Page object defined in edmx1 file

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>

Now, I want to change the ReturnType, so it will return c_Page(declared in edxm2) instead of t_Page. If I just change t_Page to c_Page in edmx1 I get error that c_Page is not defined in 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>

How I can do this?

UPDATED

The reason why I need this is:
I have several DBs with different tables except 5 of them that has same scheme but different names in each DB(e.g. c_Page,d_Page,e_Page...). It has to be with different names! Now, when I create edmx for each DB I don't want to have hundreds of "same" classes, because they all have the same scheme but different names, so I want map the same class to all those tables

Maybe I need Entity Framework 4 “Code-First”? But in this way I need to create classes manually, right?

Can you suggest me how I can do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

无远思近则忧 2024-12-10 17:25:43

这通常是不可能的。您只能使用同一 EDMX 文件中定义的类型。

这篇文章,您可以将一个 CSDL 文件包含到另一个文件中。这将允许您在一个 CSDL 文件中定义实体,并将该 CSDL 文件包含到第二个 EDMX,您将能够在其中定义 FunctionImport 并希望也使用该实体(我没有测试它)。但它会产生一些后果:

  • 只有 CSDL 文件可以通过这种方式划分
  • 您仍然需要两个 CSDL 文件的单个共享 MSL 和 SSDL 文件
  • 您不能再使用 EDMX(这些文件的容器)
  • 您不能使用设计器和相关的自动化工具和向导

编辑:

因此,根据您的编辑,您必须在每个 EDMX 中定义实体 - 无法避免这种情况。如果您确保每个 EDMX 中的实体完全相同(包括:名称、键、属性名称、关系),您可以修改用于生成类的 T4 模板,以便只有一个模板生成它们。之后,您需要确保模板生成的 ObjectContext 派生类在其公开集中使用正确的类。这都是关于T4模板的一些修改。

This is normally not possible. You can use only types defined within same EDMX file.

The only situation when this can be possible is described in this article where you are able to include one CSDL file into another. This would allow you defining entity in one CSDL file and include that CSDL file to second EDMX where you will be able to define FunctionImport and hopefully also used that entity (I didn't tested it). But it has some consequences:

  • Only CSDL files can be divided this way
  • You still need single shared MSL and SSDL file for both CSDL files
  • You cannot use EDMX (container for these files) any more
  • You cannot use designer and related automated tools and wizards

Edit:

So based on your edit you must have entities defined in every EDMX - there is no way how to avoid that. If you ensure that entities will be exactly same in every EDMX (including: names, keys, property names, relations) you can modify your T4 templates used to generate classes so that only one template generate them. After that you would need to ensure that ObjectContext derived classes generated by templates use correct classes in their exposed sets. It is all about some modifications in T4 templates.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文