Entity Framework 6, Oracle - Linq Join Query генерирует нежелательные условия - PullRequest
0 голосов
/ 30 июня 2019

У меня есть следующая схема, где я объединяю 2 таблицы, чтобы извлечь столбец описания из второй таблицы.

Я использую Entity Framework 6 с Oracle 12c

public IQueryable<TEntity> GetAll()
{
    return this.dbSet.AsQueryable();
}

var fooQuery = fooRepo.GetAll();
var barQuery = barRepo.GetAll();

var joinedQuery = 
    fooQuery.Join(
    barQuery,
    fooObj => new { fooObj.comp_key_1, fooObj.comp_key_2, fooObj.comp_key_3 },
    barObj => new { barObj.comp_key_1, barObj.comp_key_2, barObj.comp_key_3 },
    (fooItem, barItem) => new {
        fooItem.comp_key_1,
        fooItem.comp_key_2,
        fooItem.comp_key_3,
        ...
        ...
        ...
        barItem.BarName
    }
);

При выполнении кода он генерирует следующий SQL, который не настолько идеален, поскольку создается непреднамеренное предложение where.

SELECT 
    1 AS "C1", 
    "Extent1"."COMP_KEY_1" AS "COMP_KEY_1", 
    "Extent1"."COMP_KEY_2" AS "COMP_KEY_2", 
    "Extent1"."COMP_KEY_3" AS "COMP_KEY_3", 
    ...
    ...
    ...
    "Extent2"."BAR_NAME" AS "BAR_NAME"
FROM  "FOO_TABLE" "Extent1"
INNER JOIN "BAR_TABLE" "Extent2" ON ("Extent1"."COMP_KEY_1" = "Extent2"."COMP_KEY_1") AND ("Extent1"."COMP_KEY_2" = "Extent2"."COMP_KEY_2") AND ("Extent1"."COMP_KEY_3" = "Extent2"."COMP_KEY_3")
WHERE ((("Extent2"."Discriminator" = N'Foo') OR ("Extent2"."Discriminator" = N'Bar')))

Чего мне не хватает, что нужно сделать, чтобы удалить непреднамеренный пункт «Где»?

1 Ответ

0 голосов
/ 30 июня 2019

Нашел,

Имел базовый класс для 'Bar', который содержит только информацию p_key, и расширенный класс, который содержал все другие свойства.

Однажды я переместил все в один класс

("Extent2"."Discriminator" = N'Foo') OR ("Extent2"."Discriminator" = N'Bar') 

исчезло

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...