[英]Update method - Value cannot be null. (Parameter 'entity')
我有一個我無法解決的問題。 當我嘗試更新數據庫中名為“簡介”的字段時,我從 API 收到此消息:
System.ArgumentNullException:值不能為 null。 (參數“實體”)在 Microsoft.EntityFrameworkCore.Utilities.Check.NotNull[T](T 值,字符串參數名稱)在 Microsoft.EntityFrameworkCore.DbContext.Entry[TEntity](TEntity 實體)在 ClinicAPIv1.Data.UserRepository.Update( ClinicUser ClinicUser) 在 E:\Users\User\Desktop\Clinic\ClinicAPIv1\ClinicAPIv1\Data\UserRepository.cs:line 61 at ClinicAPIv1.Controllers.UsersController.UpdateDoctor(DoctorUpdateDTO doctorUpdateDTO) 在 E:\Users\User\Desktop\Clinic \ClinicAPIv1\ClinicAPIv1\Controllers\UsersController.cs:line 74 at lambda_method34(Closure, Object ) at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.TaskOfActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments) at Microsoft.AspNetCore.Mvc.Infrastructure.Co 的 Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Logged|12_1(ControllerActionInvoker 調用程序) ntrollerActionInvoker.g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker .Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Awaited|13_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) at Microsoft 。作為 pNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|19_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Logged|17_1(ResourceInvoker invoker) at Microsoft .AspNetCore.Routing.EndpointMiddleware.g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger) 在 Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context) 在 Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context) 在 ClinicAPIv1 .Middleware.ExceptionMiddleware.InvokeAsync(HttpContext context) 在 E:\Users\User\Desktop\Clinic\ClinicAPIv1\ClinicAPIv1\Middleware\ExceptionMiddleware.cs:line 30
我知道問題出在我的存儲庫中的更新 function 上:
public void Update(ClinicUser clinicUser)
{
_context.Entry(clinicUser).State = EntityState.Modified;
}
第 61 行是
_context.Entry(clinicUser).State = EntityState.Modified;
Controller Put 方法如下所示:
[HttpPut]
public async Task<ActionResult> UpdateDoctor(DoctorUpdateDTO doctorUpdateDTO)
{
var email = User.FindFirst(ClaimTypes.Name)?.Value;
var user = await _userRepository.GetUserByEmail(email);
_mapper.Map(doctorUpdateDTO, user);
_userRepository.Update(user);
if (await _userRepository.SaveAllAsync()) return NoContent();
return BadRequest("Failed to update Doctor Profile :(");
}
第 74 行是
_userRepository.Update(user);
醫生更新DTO:
public class DoctorUpdateDTO
{
public string Introduction { get; set; }
}
映射器:
public class AutoMapperProfiles : Profile
{
public AutoMapperProfiles()
{
CreateMap<ClinicUser, MemberDTO>()
.ForMember(dest => dest.PhotoUrl, opt => opt.MapFrom(
src => src.Photos.FirstOrDefault().Url));
CreateMap<Photo, PhotoDTO>();
CreateMap<DoctorUpdateDTO, ClinicUser>();
}
}
通過電子郵件獲取用戶:
public async Task<ClinicUser> GetUserByEmail(string email)
{
return await _context.clinicUsers
.Where(x => x.TemporaryRole == "Doctor")
.Include(p => p.Photos)
.SingleOrDefaultAsync(x => x.Email == email);
}
請幫我解決問題
在 AutoMapperProfiles 中調用 CreateMap 之后鏈 ReverseMap。 在此處獲取更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.