У меня есть модель, которая имеет свойство Publisher типа ApplicationUser.Когда я пытаюсь создать модель, она выдает исключение нулевой ссылки.
В модели:
[Display(Name = "Publisher")]
[ForeignKey("PublisherId")]
public ApplicationUser Publisher { get; set; }
В ApplicationUser:
public ICollection<Model> PublishedModels { get; set; }
Многозначныйодно отношение в контексте БД:
b.HasMany(u => u.PublishedModels)
.WithOne(v => v.Publisher)
.IsRequired()
.OnDelete(DeleteBehavior.Restrict);
В методе Create контроллера (получить текущего пользователя):
var user = await _userManager.GetUserAsync(HttpContext.User);
Я получаю нулевую ссылку на эту строку:
model.Publisher = user;
Я запутался, я подтвердил, что пользователь не является нулевым.Модель не нулевая, а ModelState действителен.Тогда почему я не могу присвоить это значение model.Publisher?Странно то, что если я не изменяю модель и просто сохраняю ее в БД, она работает.Но мне нужно добавить и издателя.Если я только устанавливаю дату, это тоже нормально.
Это работает, но при удалении комментариев он жалуется на нулевую ссылку при установке даты.
public async Task<IActionResult> Create([Bind(include:"...")] Model model)
{
ApplicationUser user = await _userManager.GetUserAsync(HttpContext.User);
try
{
if (ModelState.IsValid)
{
model.PublicationDate = DateTime.Now;
//user.PublishedModels.Add(model);
_context.Add(model);
//_context.Update(model.Publisher);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
}
catch (DataException /*dex*/)
{
ModelState.AddModelError("", "...");
}
return View(model);
}
В следующей трассировке стека:происходит сбой в первой строке метода ...
NullReferenceException: Object reference not set to an instance of an object.
WebApp.Controllers.Admin.ModelController.Create(Model model) in
ModelController.cs
-
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind(include:"...")] Model model)
{
var user = await _userManager.GetUserAsync(HttpContext.User);
user.PublishedModels.Add(model);
model.PublicationDate = DateTime.Now;
model.Publisher = user;
try
{
Microsoft.AspNetCore.Mvc.Internal.ActionMethodExecutor+TaskOfIActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, object controller, object[] arguments)
System.Threading.Tasks.ValueTask.get_Result () Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeActionMethodAsync () Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeNextActionFilterAsync (). Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow (контекст ActionExecutedContext).Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeInnerFilterAsync ()nal.ResourceInvoker.Next (ref State next, ref Область действия, ref ref состояние isCompleted). Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeFilterPipelineAsync () Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Invoke.AspNetCore.Routing.EndpointMiddleware.Invoke (HttpContext httpContext) Microsoft.AspNetCore.Routing.EndpointRoutingMiddleware.Invoke (HttpContext httpContext) Microsoft.AspNetCore.Authentication.Microsoft.AspNetCore.Session.SessionMiddleware.Invoke (контекст HttpContext) Microsoft.AspNetCore.Session.SessionMiddleware.Invoke (контекст HttpContext) Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.(Контекст HttpContext) Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.DatabaseErrorPageMiddleware.Invoke (HttpContext httpContext) Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.DatabaseErrorPageMiddleware.Invoke (HttpContext httpContext) Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.InConte