【发布时间】:2019-03-06 00:32:56
【问题描述】:
我以前见过这种方法,API 控制器使用包装器将工作单元对象放入 Action 委托中。然后,当使用委托时,它与接受模型并返回 Void 的服务层方法对话。这个想法是从外部范围传入模型。
//Controller Base
public void Wrapper(Action<UnitOfWork> action)
{
action(new UnitOfWork());
}
//Controller
[HttpPost]
[Route("user")]
[ResponseType(typeof(Member))]
public async Task<IHttpActionResult> PostUser(Member user)
{
Wrapper(uw => { service.Get(uw, user); });
return Ok(user);
}
//Service
public void Get(UnitOfWork uw, Member model)
{
model = uw.MemberRepository.Get(u => u.UserId == id).FirstOrDefault();
//Member m = uw.MemberRepository.Get(u => u.UserId == id).FirstOrDefault();
//model.Created = m.Created;
//model.ExpiryInDays = m.ExpiryInDays;
//model.Id = m.Id;
}
我觉得这是一个不错的方法,并且我之前在项目中看到过它......但是当我尝试上述方法时,控制器上的对象不会反映对服务所做的更改。
【问题讨论】:
-
确保 ApplicationUser 被声明为
class而不是struct -
谢谢,我可以确认它被声明为一个类。我已经尝试过声明为类的其他对象,但没有任何工作
-
我更新了代码以反映我所知道的问题。我正在尝试使用从 EF 存储库获取的数据更改模型。注释掉的代码有效。 EF 代码没有反映 Controller 端的变化
标签: c# asp.net-web-api delegates