Обновите связанные данные после выполнения метода HttpPost на контроллере другой модели в Entity Framework Core - PullRequest
0 голосов
/ 16 апреля 2020

У меня три модели. AssetRequest, IssueAsset и ReturnAsset. Я хочу обновить / изменить значение атрибута RequestStatus для модели AssetRequest на основе текущего идентификатора, чтобы оно стало Returned (в настоящее время это значение Issued, см. Тип данных enum) после выполнения метода HttpPost post на ReturnAsset контроллере.

Вот мои модели.

Модель AssetRequest

public enum RequestStatus
    {
        Waiting,        
        Reject,
        Approved,
        Issued,
        Returned,
        Canceled
    }
    public class AssetRequest
    {
        [Key]
        public int AssetRequestId { get; set; }
        public int AssetId { get; set; }
        public DateTime RequestDate { get; set; }
        public  RequestStatus? RequestStatus { get; set; }

        public virtual Asset Asset { get; set; }
        public virtual IssueAsset IssueAsset { get; set; }        
    }

Модель IssueAsset

public class IssueAsset
    {
        [Key]
        public int IssueId { get; set; }
        public int AssetRequestId { get; set; }
        public DateTime IssueDate { get; set; }
        public DateTime? ReturnDate { get; set; }

        public virtual AssetRequest AssetRequest { get; set; }
        public virtual ReturnAsset ReturnAsset { get; set; }   
    }

Модель ReturnAsset

public class ReturnAsset
    {
        [Key]
        public int ReturnAssetId { get; set; }
        public int IssueId { get; set; }

        public DateTime ReturnDate { get; set; }

        public virtual IssueAsset IssueAsset { get; set; }  
    }

Вот мой HttpGet код ReturnAsset контроллера.

// GET: ReturnAssets/Create
public IActionResult Create(int? id)
        {
            if (id == null)
            {
                return BadRequest();
            }
            var issue = _context.IssueAssets.Find(id);
            if (issue == null)
            {
                return NotFound();
            }
            var returnAsset = new ReturnAsset { IssueId = issue.IssueId, ReturnDate = DateTime.Now, IssueAsset = issue }; 
            ViewData["IssueId"] = new SelectList(_context.IssueAssets, "IssueId", "IssueId");
            return View(returnAsset);
        }

А вот мой HttpPost код.

[HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> Create([Bind("ReturnAssetId,IssueId,ReturnDate")] ReturnAsset returnAsset)
        {
            if (ModelState.IsValid)
            {
                returnAsset.IssueAsset.AssetRequest.RequestStatus = RequestStatus.Returned;
                _context.ReturnAssets.Add(returnAsset);
                await _context.SaveChangesAsync();                             
                return RedirectToAction("Index", "IssueAssets");
            }                            

            ViewData["IssueId"] = new SelectList(_context.IssueAssets, "IssueId", "IssueId", returnAsset.IssueId);
            return View(returnAsset);
        }

Но он дал мне следующую ошибку.

enter image description here

Пожалуйста, помогите мне!

...