Я использую 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
Буду очень признателен за любую помощь
Спасибо заранее