2016-11-08 4 views
0

У меня есть метод Wrapper на контроллере WebApi, который предоставляет и Action Delegate. Я использую его для общения с уровнем обслуживания. Действие проходит через UnitOfWork, у которого есть мои репозитории EF для моделейC# Action Delegates и EF Repository Scope Issues

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

//In controller 
    Unit(uw => officeService.Get3(uw, user, User.Identity.GetUserId().ToString())); 
     return Ok(user); 
    //the returned user does not have changes applied 

//Service 
public void Get3(UnitOfWork uw, Member model, string id, string include = null) 
    { 
      object m = uw.MemberRepository.Get(u => u.UserId == id).FirstOrDefault(); 
      model = (Member)m; 
      //model.Created = m.Created; 
      //model.ExpiryInDays = m.ExpiryInDays; 
      // and so on... 
    } 
+0

'Action' ничего не возвращает и вы не передаете его' ref'. Вы можете сделать 'Action'' Func <> 'и вернуть модель обратно контроллеру. –

ответ

1

Ссылка на model передаются по значению, поэтому изменение присвоения model в Get3 не будет иметь никакого влияния на вызывающем абоненте. Вы можете пройти мимо исх:

public void Get3(UnitOfWork uw, ref Member model, string id, string include = null) 

Или вернуть его (как вы, кажется, игнорируя параметр в любом случае).

public Member Get3(UnitOfWork uw, string id, string include = null) 
{ 
    // ... 
    return model; 
} 

Это потребует перегрузки Unit, который принимает Func и возвращает результат.

+0

Вы забыли параметр 'Member' в методе' Get3' –

+0

@MarkC. Я убрал его намеренно. Как отмечено в ответе, он фактически не используется в методе. –

+0

'model = (Member) m;' похоже, что он пытался обновить свойства на нем. Поэтому я бы не сказал, что он не используется, просто используется неправильно –