Asp.net-Core

獲取錯誤:實體類型“課程”是使用單個鍵屬性定義的,但有 2 個值被傳遞給“DbSet.Find”方法

  • April 19, 2019

我有一個 GenericRepository,CourseRepository 繼承自它,Entities 返回一個課程列表

public class CourseRepository : GenericRepositories<Course>, ICourseRepository
       {
           public CourseRepository(LearningSiteDbContext Context) : base(Context)
           {

           }
        }

public class GenericRepositories<TEntity> : IGenericRepositories<TEntity> where TEntity : class, IEntity,new()
   {
       protected readonly LearningSiteDbContext context;
       public DbSet<TEntity> Entities { get; set; }

       public GenericRepositories(LearningSiteDbContext Context)
       {
           context = Context;
           Entities = context.Set<TEntity>();
       }
   }

但是當我在 Razor 頁面中執行這個處理程序時

public async Task OnGetAsync(int Id, CancellationToken cancellationToken)
{
   var selectedCourse = await courseRepository.Entities.FindAsync(Id,cancellationToken);
               Model = mapper.Map<CourseEditVm>(selectedCourse);
 }

我收到以下錯誤:

實體類型“課程”使用單個鍵屬性定義,但有 2 個值被傳遞給“DbSet.Find”方法

這是 Course 實體類

public class Course 
{
   public Course()
   {

   }
   public Course(DateTime CreateDate)
   {
       this.CreateDate = CreateDate;
   }

   public int Id {get;set;}

   public string CourseTitle { get; set; }

   public string CourseDescription { get; set; }

   public decimal CoursePrice { get; set; }

   public string ImageName { get; set; }

   public string DemoFileName { get; set; }

   public DateTime CreateDate { get; set; }

   public DateTime? UpdateDate { get; set; }
   public bool IsDeleted { get; set; }

   //Foreign key
   public int? CourseStatusId { get; set; }
   public int? CourseLevelId { get; set; }
   public Guid? CustomUserId { get; set; }
   public int? CourseGroupId { get; set; }

   //Navigations
   public CourseStatus CourseStatus { get; set; }
   public CourseLevel CourseLevel { get; set; }
   public CustomUser CustomUser { get; set; }
   public CourseGroup CourseGroup { get; set; }
   public ICollection<CourseEpisod> CourseEpisods { get; set; }
   public ICollection<Keyword> Keywordkeys { get; set; }
}

這是課程配置

class CourseConfig : IEntityTypeConfiguration<Course>
{
   public void Configure(EntityTypeBuilder<Course> builder)
   {
       builder.HasKey(c => c.Id);
       builder.Property(c => c.Id).ValueGeneratedOnAdd();
       builder.Property(c => c.CourseTitle).HasMaxLength(50);
       builder.Property(c => c.CourseDescription).HasMaxLength(400);
       builder.Property(c => c.ImageName).HasMaxLength(255);
       builder.Property(c => c.DemoFileName).HasMaxLength(255);

       //Relations
       builder.HasMany(c => c.Keywordkeys).WithOne(c => c.Course).HasForeignKey(c => c.CourseId);
       builder.HasOne(c => c.CustomUser).WithMany(c => c.Courses).HasForeignKey(c => c.CustomUserId);
   }
}

但是當我執行此程式碼時,我將不再收到此錯誤

 var selectedCourse = await courseRepository.Entities.FirstOrDefaultAsync(c => c.Id == Id, cancellationToken);

這個錯誤的原因是什麼?我的程式碼錯了嗎?我應該如何解決這個錯誤?

你使用了錯誤的方法,如果你在這裡檢查 FindAsync你可以看到如果你想傳遞一個取消令牌,你需要像這樣將你的密鑰作為一個數組傳遞

.FindAsync(new object[]{id}, cancellationToken);

引用自:https://stackoverflow.com/questions/55758059