Entity Framework 4: сопоставленная хранимая процедура на модели с дополнительными параметрами - PullRequest
2 голосов
/ 15 июля 2010

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

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

У нас возникает следующая проблема:

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

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

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

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

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

1 Ответ

0 голосов
/ 15 июля 2010

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

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

exec myproc @ firstName, @ LastName, null

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