#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 не работает. Значения не обновляются.