Тип объекта ‘ ‘ определяется с помощью одного ключевого свойства, но в метод ‘DbSet.Find’ было передано 3 значения

#c# #asp.net-core #razor-pages

#c# #asp.net-core #razor-страницы

Вопрос:

Когда я пытаюсь обновить свою таблицу ‘StaffAssets’, я получаю указанную ниже ошибку. ‘Тип объекта ‘StaffAssets’ определяется с помощью одного ключевого свойства, но в метод ‘DbSet.Find’ было передано 3 значения.’

введите описание изображения здесь

Это моя функция обновления

 public async Task<IActionResult> OnPostEditAssetsDetailsAsync(int current = 4)
        {
            ShowAssetName = new SelectList(_context.Assets, "assetname", "assetname");
            if (ModelState.GetFieldValidationState("StaffAssets") == ModelValidationState.Valid)
            {
                var staffassets = await _context.StaffAssets.FindAsync(StaffAssets.StaffID,StaffAssets.EmpID,StaffAssets.StaffAssetName);
                if (await TryUpdateModelAsync<StaffAssets>(
                staffassets,
                "StaffAssets",
                s => s.StaffAssetName, s => s.IssuedQty, s => s.IssuedDate))
                {
                    await _context.SaveChangesAsync();

                }
                await _context.SaveChangesAsync();
                //when add works, then  1 ,means next tab
                currentTab = current;
                TempData["EmpID"] = StaffAssets.EmpID;
                TempData["StaffID"] = StaffAssets.StaffID;
                ShowStaffAssets = _context.StaffAssets.Where(c => c.StaffID == StaffAssets.StaffID).OrderBy(c => c.StaffAssetName).AsNoTracking().ToList();
                return Page();
            }
            else
            {
                var errors = ModelState.Values.SelectMany(v => v.Errors);
                currentTab = current;
                return Page();
            }
        }
 

Это класс модели StaffAssets

 using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;

namespace Contractor_HRMS.Models
{
    public class StaffAssets
    {
        //--- Staff Id ---//
        [Key]
        public int StaffID { get; set; }

        //--- Emp Id ---//  
        
        [Display(Name = "Employee ID*"), StringLength(100)]
        public string EmpID { get; set; }

        //--- Asset Name ---//
        
        [Required(ErrorMessage = "Please select Asset")]
        [Display(Name = "Asset Name *"), StringLength(100)]
        public string StaffAssetName { get; set; }

        //--Issued Quantity ---//
        [Required(ErrorMessage = "Please enter Issued Quantity")]
        [Display(Name = "Issued Quantity*"), StringLength(10)]
        public string IssuedQty { get; set; }

        //--Issued Date ---//
        [Required(ErrorMessage = "Please select Issued Date")]
        [Display(Name = "Issued Date*")]
        [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
        [DataType(DataType.Date)]
        public DateTime IssuedDate { get; set; }

        //--Return Quantity ---//
        [Required(ErrorMessage = "Please enter Return Quantity")]
        [Display(Name = "Return Quantity*"), StringLength(10)]
        public string ReturnQty { get; set; }

        //--Return Date ---//
        //[Required(ErrorMessage = "Please enter Return Date")]
        [Display(Name = "Return Date*")]
        [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
        [DataType(DataType.Date)]
        public DateTime? ReturnDate { get; set; }

        [Display(Name = "Last Modified By")]
        public string LastModifiedBy { get; set; }

        [Display(Name = "Last Modified TimeStamp")]
        [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
        [DataType(DataType.Date)]
        public DateTime? LastModifiedTimestamp { get; set; }
    }
}
 

Это мой дизайн таблицы

введите описание изображения здесь

Не могу понять, где я ошибаюсь.Любая помощь будет оценена.

Комментарии:

1. Похоже, что ваш класс модели определяет его как имеющий только одно поле первичного ключа, которое не соответствует вашей базе данных.

2. для определения составных ключей мне нужно использовать webapi.ryt? я получаю эту ошибку.

3. Давайте сделаем шаг назад, знаете ли вы, что такое составной ключ, и нужен ли он вам или нужен?, если нет, не используйте find

4. @В общем, я не знаю, что такое составной ключ, мне действительно не нужно it.my таблица staffassets будет иметь три ключа StaffID, EmpID и StaffAssetName. Поэтому, когда я получил сообщение об ошибке, я добавил [key] dataannotation к EmpID и StaffAssetName, затем ошибка оказалась такой, как будто для использования составного ключа требуется какой-то подобный вызов webapi. Мне просто нужно обновить свою запись, вот и все.

5. @Общие вместо использования FindAsync () я использовал метод FirstOrDefaultAsync (), теперь ошибка исчезла, но сейчас происходит то, что метод TryUpdateModelAsync не работает. Значения не обновляются.