Произошла ошибка фильтра по связанной коллекции - PullRequest
0 голосов
/ 06 марта 2019

Я использую Entity Framework Core 2.2.2 в Windows 10 x64

У меня есть следующая структура решения:

  • DbContext (стандарт .Net в C #)
  • Модель (Стандарт .Net в Vb.Net)
  • ConsoleApp (.Net 4.6.1 в Vb.Net)

И у меня есть следующая модель и контекст:

Public Class User
    Public Property Id As Integer
    Public Property Firstname As String
    Public Property Lastname As String
    Public Property WorkingAreas As ICollection(Of WorkingArea)
End Class

Public Class WorkingArea
    Public Property Id As Integer
    Public Property UserId As Integer
    Public Property User As User
    Public Property ClientId As Integer
    Public Property Client As Client
End Class

Public Class Client
    Public Property ClientId As Integer
    Public Property Name As String
End Class

public class LinqTestContext : DbContext
{
    public DbSet<User> Users { get; set; }
    public DbSet<WorkingArea> WorkingAreas { get; set; }
    public DbSet<Client> Clients { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer(@"Server=localhost;Database=LinqDbTest;MultipleActiveResultSets=true;Persist Security Info=True;Trusted_Connection=True;");
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<User>().HasMany(a => a.WorkingAreas).WithOne(b => b.User).HasForeignKey(c => c.UserId);

    }
}

Теперь моя проблема:

Пользователи могут быть назначены нескольким рабочим областям. Теперь я хочу, чтобы все пользователи, которые находятся в рабочей области с ClientId 1.

Но я получаю исключение:

System. des Vorgangs ändern würde. Wenn dies beabsichtigt ist, überschreiben Sie "VisitUnary", und nehmen Sie entsprechende Änderungen vor, sodass das Neuschreiben zugelassen wird. "

Я пытаюсь перевести это:

System.InvalidOperationException: «Перезапись дочернего выражения типа» System.Collections.Generic.IEnumerable`1 [Microsoft.EntityFrameworkCore.Storage.ValueBuffer] "в типе" System.Boolean "не допускается, поскольку это изменится Значение операции. Если это намеренно, переопределите VisitUnary и внесите соответствующие изменения, чтобы разрешить перезапись. "

Вот мои попытки, но ни одна из этих работ:

Using ctx1 As New TestContext.LinqTestContext
            'Dim users = ctx.Users.Where(Function(wa) wa.WorkingAreas.Where(Function(a) a.ClientId = 1).Any).ToList
            'Dim users = ctx.Users.Where(Function(wa) wa.WorkingAreas.Select(Function(s) s.ClientId).Contains(1)).ToList
            'Dim users = ctx.Users.Where(Function(wa) wa.WorkingAreas.Any(Function(x) x.ClientId = 1)).ToList
            Dim users = ctx.Users.Where(Function(wa) wa.WorkingAreas.Any(Function(x) x.Client.ClientId = 1)).ToList
        End Using

Буду очень признателен за любую помощь Спасибо заранее

...