Я пытаюсь выбрать данные из отношения многие ко многим, используя EF Core (Code First), и получаю следующую ошибку:
Необработанное исключение: System.ArgumentException: должно быть приведеноузел
Не думаю, что я делаю что-то особенно странное, и я могу с радостью выполнить рассматриваемый запрос, используя LinqToSQL в LinqPad.Надеюсь, кто-то может указать, где я ошибаюсь?
Я создал минимальное (и надуманное) воспроизведение в консольном приложении, которое можно найти здесь .По сути, я смоделировал отношение многие ко многим, используя объединяющуюся таблицу: следует :
public class Foo
{
[Key]
public int Id { get; set; }
public ICollection<FooBar> FooBars { get; set; } = new List<FooBar>();
}
public class Bar
{
[Key]
public int Id { get; set; }
public string Value { get; set; }
public ICollection<FooBar> FooBars { get; set; } = new List<FooBar>();
}
public class FooBar
{
[Required]
public int FooId { get; set; }
[ForeignKey(nameof(FooId))]
public Foo Foo { get; set; }
[Required]
public int BarId { get; set; }
[ForeignKey(nameof(BarId))]
public Bar Bar { get; set; }
}
Я хотел бы создать поиск Value
из объекта Bar
сId
из Foo
в качестве ключа, используя следующий запрос :
ILookup<int, string> data =
this.context.Foos
.SelectMany(f => f.FooBars.Select(fb => new { f.Id, fb.Bar.Value }))
.ToLookup(fb => fb.Id, fb => fb.Value);
Перед ошибкой я получаю в консоли следующее предупреждение:
Microsoft.EntityFrameworkCore.Query [20500] Выражение LINQ 'из <> f__AnonymousType0 2 <generated>_0 in {from FooBar fb in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable
1 [ReducibleNodeDemo.FooBar]) присоединяется к бару fb.Bar со значением (Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable * 1029)= [f] .Id, Value = [fb.Bar] .Value)} 'не может быть переведен и будет оцениваться локально.
Я относительно новичок в EF Core, но работаюс EF6 в течение многих лет, и никогда не было проблем с такими простыми запросами, как этот!