Ошибка получения: тип сущности «Курс» определен с одним ключевым свойством, но 2 значения были переданы методу «DbSet.Find» - PullRequest
2 голосов
/ 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 Page

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

Я получаю следующую ошибку:

Тип сущности «Курс» определяется с помощью одного ключевого свойства, но 2 значения были переданы методу «DbSet.Find»

И это курс сущности класса

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);

В чем причина этой ошибки? Мой код неверен? Как мне исправить эту ошибку?

1 Ответ

2 голосов
/ 19 апреля 2019

Вы используете неправильный метод, если вы отметите здесь FindAsync , вы увидите, что если вы хотите передать токен отмены, вам нужно передать ключи в виде массива, подобного этому

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