Asp.net-Core
獲取錯誤:實體類型“課程”是使用單個鍵屬性定義的,但有 2 個值被傳遞給“DbSet.Find”方法
我有一個 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);