Как установить ReturnType FunctionImport для объекта, который определен в другом файле EDMX? - PullRequest
0 голосов
/ 07 сентября 2011

У меня есть FunctionImport в одном файле edmx1, и я хочу установить ReturnType для объекта, который находится в другом файле edmx2.

например, у меня есть файл edmx1 со следующими объектами FunctionImport и t_Page, определенными в файле edmx1

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.Если я просто поменяю t_Page на c_Page в edmx1, я получу ошибку, что 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 для каждой БД, я не хочу иметь сотни «одинаковых» классов, потому что все они имеют одинаковую схему, но разные имена, поэтому я хочу сопоставить один и тот же класс всем этим таблицам

Может быть, мне нужна Entity Framework 4 «Code-First»?Но таким образом мне нужно создавать классы вручную, верно?

Можете ли вы предложить мне, как я могу это сделать?

1 Ответ

0 голосов
/ 07 сентября 2011

Обычно это невозможно. Вы можете использовать только типы, определенные в одном и том же файле EDMX.

Единственная ситуация, когда это возможно, описана в этой статье , где вы можете включить один файл CSDL в другой. Это позволит вам определить сущность в одном файле CSDL и включить этот файл CSDL во второй EDMX, где вы сможете определить FunctionImport и, надеюсь, также использовать эту сущность (я ее не проверял). Но это имеет некоторые последствия:

  • Таким образом можно разделить только файлы CSDL
  • Вам все еще нужен один общий MSL и SSDL-файл для обоих CSDL-файлов
  • Вы больше не можете использовать EDMX (контейнер для этих файлов)
  • Вы не можете использовать конструктор и связанные с ним автоматизированные инструменты и мастера

Edit:

Таким образом, исходя из ваших правок, в каждом EDMX должны быть определены сущности - как этого избежать нельзя. Если вы гарантируете, что сущности будут точно такими же в каждом EDMX (включая: имена, ключи, имена свойств, отношения), вы можете изменить свои шаблоны T4, используемые для генерации классов, чтобы их генерировал только один шаблон. После этого вам необходимо убедиться, что ObjectContext производные классы, сгенерированные шаблонами, используют правильные классы в своих открытых наборах. Это все о некоторых модификациях в шаблонах T4.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...