Когда вызывать методы getbyid метод, я получаю ошибку составного ключа если нажать первую кнопку на создание представления о ASP.NET ядро 2.1
Как решить эту ошибку и почему это происходит ?
An unhandled exception occurred while processing the request. ArgumentException: Entity type 'Employee' is defined with a 2-part composite key, but 1 values were passed to the 'DbSet.Find' method. Microsoft.EntityFrameworkCore.Internal.EntityFinder<TEntity>.FindTracked(object[] keyValues, out IReadOnlyList<IProperty> keyProperties) Stack Query Cookies Headers ArgumentException: Entity type 'Employee' is defined with a 2-part composite key, but 1 values were passed to the 'DbSet.Find' method. Microsoft.EntityFrameworkCore.Internal.EntityFinder<TEntity>.FindTracked(object[] keyValues, out IReadOnlyList<IProperty> keyProperties) Microsoft.EntityFrameworkCore.Internal.EntityFinder<TEntity>.Find(object[] keyValues) Microsoft.EntityFrameworkCore.Internal.InternalDbSet<TEntity>.Find(object[] keyValues) TabDataAccess.Repositories.RepositoryTab<T>.GetById(object Id) in RepositoryTab.cs + return dbSet.Find(Id); WebTabCore.Controllers.EmployeeController.Create(Nullable<int> id) in EmployeeController.cs + model = _repository.GetById(id);
repository interface public interface IrepositoryTab<T> where T : class { T GetById(object Id); } repository implementaion public class RepositoryTab<T> : IrepositoryTab<T> where T : class { protected TabDbContext db { get; set; } private DbSet<T> dbSet; public RepositoryTab(TabDbContext Tabdb) { db = Tabdb; dbSet = db.Set<T>(); } public T GetById(object Id) { return dbSet.Find(Id); } } public class Employee { [DatabaseGenerated(DatabaseGeneratedOption.None)] public int EmployeeId { get; set; } public int BranchCode { get; set; } public string EmployeeName { get; set; } } modelBuilder.Entity<Employee>() .HasKey(t => new { t.EmployeeId, t.BranchCode });
Что я уже пробовал:
What I have tried: public class EmployeeController : Controller { private readonly IrepositoryTab<Employee> _repository; public EmployeeController(IrepositoryTab<Employee> emp) { this._repository = emp; } public async Task<IActionResult> Create(int? id) { var model = new Employee(); if (id != null) { model = _repository.GetById(id); } } public IActionResult First() { var employee = _repository.GetAll().FirstOrDefault(); return RedirectToAction("Create", new { id = employee.EmployeeId}); } on view create <button id="BtnFirst" onclick="location.href='@Url.Action("First", "Employee",new { id = Model.EmployeeId})'" style="display:inline">First</button>
ahmed_sa
кто-нибудь может мне помочь, пожалуйста ?
Мне нужно передать ключ composit, чтобы получить идентификатор
но также у меня есть несколько таблиц с одним ключом
так что же мне делать пожалуйста