Вручную добавленные хранимые процедуры в файле edmx - PullRequest
5 голосов
/ 25 декабря 2011

Можно ли постоянно добавлять хранимые процедуры, добавленные вручную, в файл edmx?База данных генерируется из модели.Каждый раз, когда я что-то изменяю в редакторе в файле edmx, хранимые процедуры теряются.Впоследствии доступна только запись FunctionImport.

Пример функции выглядит следующим образом:

    <Function Name="SP_I_InsertGroup" Aggregate="false" BuiltIn="false" NiladicFunction="false" IsComposable="false" ParameterTypeSemantics="AllowImplicitConversion" Schema="dbo">
      <Parameter Name="name" Type="nvarchar" Mode="In" />
      <Parameter Name="chiefId" Type="int" Mode="In" />
      <Parameter Name="description" Type="nvarchar" Mode="In" />
      <Parameter Name="parentId" Type="int" Mode="In" />
      <Parameter Name="mode" Type="char" Mode="In" />
    </Function>

Соответствующее отображение FunctionImport:

    <FunctionImportMapping FunctionImportName="InsertGroup" FunctionName="DAL.Store.SP_I_InsertGroup" />

FunctionImport:

      <FunctionImport Name="InsertGroup" ReturnType="Collection(Int32)">
        <Parameter Name="name" Mode="In" Type="String" />
        <Parameter Name="chiefId" Mode="In" Type="Int32" />
        <Parameter Name="description" Mode="In" Type="String" />
        <Parameter Name="parentId" Mode="In" Type="Int32" />
        <Parameter Name="mode" Mode="In" Type="String" />
      </FunctionImport>

Ответы [ 2 ]

2 голосов
/ 25 декабря 2011

Moo, вам не следует изменять файл edmx вручную.

"Изменения в этом файле могут привести к некорректному поведению и будут потеряны, если код будет восстановлен."

Этопочему ты теряешь свою работу.Вы должны отобразить уже созданную хранимую процедуру из конструктора так же, как вы делали это со своими столами.

Я предполагаю, что вы играете с EF4.

0 голосов
/ 14 июля 2014

Это решение работает, если вы сделали Model First и не хотите генерировать модель из базы данных. (Используя VS2013, EF6, MVC5)

Откройте файл EDMX. Щелкните правой кнопкой мыши и нажмите «Обновить модель из базы данных». Отметьте только «Хранимые процедуры и функции» и снимите два флажка внизу, кроме «Импортировать выбранные хранимые процедуры и функции в модель объекта» (см. Изображение ниже)

Update Model Wizard

Примечание. Если у вас есть аннотации данных и т. Д., Они будут регенерированы и перезаписаны.

Ссылка: Использование хранимых процедур в Entity Framework ModelПервый подход (Часть I - Добавление новой хранимой процедуры)


Дополнительные пояснения и подробности:

"Когда мастер модели данных сущности генерирует.Файл edmx из базы данных, он создает записи в модели хранения для каждой хранимой процедуры в базе данных. Соответствующие записи добавляются в концептуальную модель при создании импорта функций. " Как: импортировать хранимую процедуру (инструменты модели данных объекта)

Похоже, вам нужно обновить модель из базы данных, чтобы использовать «Добавить новый> Импорт функции ..».Мастер импорта хранимых процедур.В противном случае он не будет отображаться в списке. Если вы добавите их вручную, вы рискуете их перезаписать.Это будет происходить каждый раз, когда вы редактируете свою модель. Вы должны будете поддерживать этот код в актуальном состоянии каждый раз, когда вносите изменения в модель или базу данных (я сохраню резервную копию).

Вот как вы это делаете, генерируя модель из базы данных: Модель EF сначала с хранимыми процедурами

Они также ссылаются на обновление модели из базы данных в этом сообществе MSDNФорум поддержки: как добавить новую хранимую процедуру в существующий файл .edmx

Это единственный способ обновить хранимые процедуры, БЕЗ обновления модели.

...