2010-07-15 3 views
2

Мы начали использовать Entity Framework 4 для доступа к данным и столкнулись с проблемой или, возможно, с непониманием.Entity Framework 4: Сохраненная процедура на модели с дополнительными параметрами

Наша текущая система в значительной степени зависит от хранимых процедур, эта процедура содержит некоторую необходимую бизнес-логику, поэтому нам нужно продолжать использовать их при выполнении операции «Выбрать/Вставить/Обновить/Удалить».

Вопрос, который мы имеем следующий:

Мы сопоставляются таблицу в сущности, скажем, например, это лицо пользователя и обладает следующими свойствами - USERID, FirstName, LastName

Теперь в нашем sproc для вставки пользователя мы принимаем FirstName, LastName, CreatedById в качестве параметров.

Поскольку наш пользовательский объект не имеет установленного значенияBBIId, мы получаем сообщение об ошибке, указывающее, что никакое свойство нашего объекта не может быть сопоставлено с параметром «CreatedById».

Теперь одна вещь, которую мы пробовали, - это вручную добавить в наш Entity свойство ScriptBayId, но это приводит к тому, что в нашей таблице пользователя нет поля в источнике данных, который сопоставляется с CreatedById. В общем, дополнительное свойство, которое мы хотели бы передать, не является тем, что хранится.

Теперь есть потенциальное решение для этого, поскольку мы можем просто сопоставить процедуры с функциями Импорт и не беспокоиться об использовании .AddObject, .DeleteObject, .SaveChanges, чтобы манипулировать нашими объектами, но это не похоже на способ идти об этом.

ответ

0

это хороший вопрос. Есть несколько вариантов, о которых я могу рассказать. вместо того, чтобы сопоставлять сущность с таблицей, отобразить ее в представлении и вернуть представление CreatedById, а затем ваша проблема будет решена.

Второй вариант заключается в создании перегруженной хранимой процедуры, которая принимает только имя FirstName, LastName и вызывает фактическую хранимую процедуру со значением по умолчанию для CreatedById. Вы можете создавать перегрузки на уровне базы данных или создавать ее в модели на уровне ssdl, которая поддерживает встроенную хранимую процедуру.

Exec MyProc @ ПгвЬЫат, @ LastName, нуль

+0

Спасибо за ваш ответ, к сожалению, это не решит нашу проблему, процедура мы называем уже устанавливает значение по умолчанию для дополнительного параметра. Параметр, который мы пытаемся передать, не имеет представления в БД, поэтому представление не будет работать. Возможно, CreatedById был плохим примером в этом случае. Этот параметр в основном используется только для указания того, как следует обрабатывать другие данные. Другой пример может быть, если параметр «Источник» указывает, откуда пришел запрос на создание пользователя, это влияет на то, как мы храним пользователя, или, может быть, как мы устанавливаем UserType. –

Смежные вопросы