Импорт функции Entity Framework: отображение входных параметров - PullRequest
1 голос
/ 28 августа 2010

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

context.SaveUser( user.FirstName, user.LastName, ... );

Я могу просто назвать это так:

context.SaveUser( user );

Что я действительно хочу, так это максимально изолировать возможные изменения схемы. Я использую только EF для генерации сущностей и импорта функций; все взаимодействие с БД осуществляется через вызовы функций. Поэтому, когда бы ни изменялась таблица User, я хочу перегенерировать сущность User в визуальном конструкторе и изменить код бизнес-логики соответствующим образом; Я не хочу менять уровень доступа к данным. В настоящее время я не вижу никакого способа обойти эти зависимые вызовы набора свойств из уровня доступа к данным в EF (как тот, который я опубликовал выше), что является позором, поскольку они могут быть легко восстановлены вместе с классами сущностей.

Есть ли другая стратегия, которая позволила бы мне достичь того же? Причина, по которой я использую эти хранимые процедуры, на самом деле заключается в том, что я хочу иметь полный контроль над SQL (может быть, я просто параноик, но немного страшно в конечном итоге получить кучу кода LINQ, практически не имея возможности контролировать фактический SQL).

Возможна ли такая вещь?

Спасибо

Ответы [ 2 ]

0 голосов
/ 29 августа 2010

Это возможно, но не так, как вы пытаетесь достичь. Каждый объект позволяет отображать действия вставки, обновления и удаления в хранимые процедуры. Поэтому в вашем случае я предполагаю, что вам нужно создать сопоставление для действия «Вставить и обновить» для хранимой процедуры SaveUser. Когда сопоставление выполнено, хранимая процедура вызывается изнутри каждый раз, когда сущность добавляется или обновляется в наборе сущностей и запрашивается SaveChanges. Таким образом, вы будете работать с сущностью, установленной так же, как и без хранимых процедур. Проверьте эти статьи на MSDN: Как и Пошаговое руководство .

Edit:

Попробуйте использовать упомянутый подход и сохраните изменения следующим образом:

var user = new User();
FillUser(user); // fill modified data to user entity

using (var context = new MyContext())
{
  context.Users.Attach(user);
  context.ObjectStateManager.ChangeObjectState(user, EntityState.Modified);
  context.SaveChanges(); // This should call your Update stored procedure
}
0 голосов
/ 29 августа 2010

Я не думаю, что это возможно без какого-либо дополнительного стандартного кода.

Возможно, вам следует пересмотреть свою текущую стратегию доступа и не использовать хранимые процедуры.Тогда вы сможете делать это как хотите.

...