2014-09-25 4 views
0

Я использую Entity Framework 6.1, и мы сопоставили наши хранимые процедуры CUD с нашими объектами.Можете ли вы передать дополнительные параметры в дополнение к первичному ключу для сохраненного процесса для Entity Framework 6?

Все отлично работает для создания и обновления. Тем не менее, для удалений я хотел бы передать измененное имя пользователя на удаленный хранимый процесс, чтобы мы могли его зарегистрировать в таблицах аудита.

Я попытался добавить эти дополнительные параметры для модели строителя, когда я карту сохраненных проков:

private void MapStoredProcNamesWithExtraDeleteParams<T>(DbModelBuilder modelBuilder) where T : BaseAuditableObject 
    { 
     var tableName = typeof(T).GetCustomAttributes(false).OfType<TableAttribute>().First(); 

     modelBuilder.Entity<T>() 
      .MapToStoredProcedures(s => 
       s.Update(u => u.HasName(string.Format("{0}Update", tableName.Name))) 
       .Delete(d => d.HasName(string.Format("{0}Delete", tableName.Name)) 
        .Parameter(x => x.ModifiedBy, "ModifiedBy") 
        .Parameter(x => x.ModifiedBy, "ModifiedDate") 
        .Parameter(x => x.ModifiedBy, "ModifiedByProgramName") 
        ) 
       .Insert(i => i.HasName(string.Format("{0}Insert", tableName.Name)))); 
    } 

Однако это не удается, потому что он говорит, что нет никакого поля ModifiedBy на функции удаления.

Есть ли способ сделать это или мне нужно сначала обновить измененные, сохранить изменения, затем удалить объект и сохранить изменения еще раз?

ответ

0

Обнаружил проблему, которая позволила мне делать то, что я хотел, хотя и с некоторой дополнительной работой.

Чтобы обойти это, мы добавили ConcurrencyCheck attribute ко всем дополнительным свойствам, которые мы хотели передать хранимой процедуре удаления. Затем нам пришлось добавить эти свойства плюс _Original для всех обновлений и удаления хранимых процедур (хотя мы использовали их только в удаленных).

Итак, если ваше имя свойства было изменено, вы добавили бы параметр к вашему обновлению и удалили бы хранимые процедуры под названием @ModifiedBy_Original.

Как только мы это сделали, мы могли бы получить нужные нам данные для удаления хранимых процедур по желанию.

0

Лицо, которое в последний раз модифицировало запись, не обязательно является лицом, удаляющим запись. Добавление проверки параллелизма в ModifiedBy действительно передаст измененный столбец записи в параметр удаленной хранимой процедуры с именем @ModifiedBy_Original, но это не то, что вам нужно в этом случае.

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

+0

Это правильно. Мы закончили подключение к методу SaveChanges DataContext, и там мы получим список элементов, которые будут удалены, и запишите запись в журнал аудита для каждого. Я могу разработать, если вы все еще пытаетесь решить эту проблему. – Bryant