EF Core 8 подсчитывает отношения «многие ко многим», генерирующие неверный запросC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 EF Core 8 подсчитывает отношения «многие ко многим», генерирующие неверный запрос

Сообщение Anonymous »

У меня есть сущность TenantOrganization, которая имеет отношение «многие ко многим» с SharedIndustry с таблицей соединений TenantOrganizationIndustries. Я пытаюсь подсчитать, сколько организаций используют ту или иную отрасль, чтобы предотвратить или разрешить ее удаление. EF Core 8 генерирует запрос, который кажется мне странно сложным, что является своего рода нормой для EF, но я надеялся, что с Core 8 ситуация улучшится.
Но более серьезная проблема с Запрос заключается в том, что он пытается присоединиться к несуществующей таблице, и я не могу понять, где он это находит. Это создаваемый запрос:

Код: Выделить всё

SELECT TOP(1) (
SELECT COUNT(*)
FROM [Tenant].[OrganizationIndustries] AS [o]
INNER JOIN [TenantOrganization] AS [t] ON [o].[OrganizationId] = [t].[Id]
WHERE [i].[Id] = [o].[IndustryId])
FROM [Shared].[Industries] AS [i]
WHERE [i].[Id] = @__command_Id_0
Вот запрос:

Код: Выделить всё

_shared.Industries.Where(i => i.Id == command.Id).Select(i => i.Organizations.Count).FirstAsync(cancellationToken)
Это моя текущая попытка настроить навигацию:

Код: Выделить всё

builder.Entity().HasMany(
to => to.Industries).WithMany(
si => si.Organizations).UsingEntity(
"OrganizationIndustries",
l => l.HasOne(typeof(SharedIndustry)).WithMany().HasForeignKey(nameof(TenantOrganizationIndustry.IndustryId)).HasPrincipalKey(nameof(SharedIndustry.Id)),
r => r.HasOne(typeof(TenantOrganization)).WithMany().HasForeignKey(nameof(TenantOrganizationIndustry.OrganizationId)).HasPrincipalKey(nameof(TenantOrganization.Id)),
j => j.ToTable("OrganizationIndustries", "Tenant"));
А это модели:

Код: Выделить всё

public sealed class SharedIndustry {
public SharedIndustryId Id { get; set; }
public ICollection Organizations { get; } = [];
}

public sealed class TenantOrganization {
public TenantOrganizationId Id { get; set; }
public ICollection Industries { get; } = [];
}

public sealed class TenantOrganizationIndustry {
public SharedIndustryId IndustryId { get; set; }
public TenantOrganizationId OrganizationId { get; set; }
}
Как заставить EF Core 8 генерировать запрос, который использует хотя бы правильные имена таблиц?


Подробнее здесь: https://stackoverflow.com/questions/784 ... -bad-query
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»