Хорошо, мое решение не лучшее, но оно работает: нам нужно добавить поле Id и уникальное ограничение к нему:
public class BookCategory
{
public int Id { get; set; }
public int BookId { get; set; }
public Book Book { get; set; }
public int CategoryId { get; set; }
public Category Category { get; set; }
}
и
modelBuilder.Entity<BookCategory>().HasAlternateKey(bc => bc.Id);
, а затем, если мы хотим загрузить связанные сущности через оддаты, нам также нужно добавить сущность ссылки в маршруты одататы. Я использую метод расширения, поэтому он выглядит следующим образом:
public static void RegisterOdataRoute<TEntity>(this ODataConventionModelBuilder builder, string name = null, bool pluralize = true) where TEntity : class
{
name = name ?? $"{typeof(TEntity).Name}";
var names = pluralize ? $"{name}s" : name;
OdataRoutes.Add(name, $"~/odata/{names}");
builder.EntitySet<TEntity>(names).EntityType.Count().Filter().OrderBy().Expand(SelectExpandType.Allowed,10).Select().Page().Count();
}
}
и
app.UseOData(builder =>
{
builder.RegisterOdataRoute<BookCategory>();
...
Если кто-то нашел лучшее решение, пожалуйста, дайте мне знать!