У меня есть следующие объекты
public class Course
{
public long Id { get; set; }
public virtual ICollection<User> Users{ get; set; }
public virtual ICollection<UserCourse> CourseUsers { get; set; }
}
public class User
{
public long Id { get; set; }
public virtual ICollection<Course> Courses { get; set; }
public virtual ICollection<UserCourse> UserCourses { get; set; }
}
public class UserCourse
{
public long UserId { get; set; }
public User User { get; set; }
public long CourseId { get; set; }
public Course Course { get; set; }
public bool IsRequired { get; set; }
}
со следующими отображениями для
Отображение пользовательского курса:
builder
.HasOne(nav => nav.User)
.WithMany(self => self.UserCourses)
.HasForeignKey(fk => fk.UserId)
.OnDelete(DeleteBehavior.Cascade);
builder
.HasOne(nav => nav.Course)
.WithMany(self => self.CourseUsers)
.HasForeignKey(fk => fk.CourseId)
.OnDelete(DeleteBehavior.Cascade);
и сопоставление пользователей
builder
.HasMany(nav => nav.Courses)
.WithMany(nav => nav.Users);
При попытке создать новую миграцию я не совсем понимаю, почему я это получаю.
Невозможно использовать таблицу «UserCourse» для типа сущности «UserCourse», поскольку она используется для типа сущности «UserCourse (Словарь‹строка, объект›)» и, возможно, других типов сущностей, но нет связывающей связи. Добавьте внешний ключ в «UserCourse» в свойствах первичного ключа и укажите на первичный ключ в другом объекте, тип которого сопоставлен с «UserCourse».
Я понимаю, в чем ошибка, но не знаю, как заставить сопоставление UserCourse использовать созданную таблицу соединений, созданную сопоставлением пользователя, или наоборот.
Кроме того, мне нужно прямое сопоставление для OData и косвенное сопоставление с использованием объекта соединения для выполнения операций с DbSet<UserCourse>
.