ef core генерирует неверный запрос - PullRequest
0 голосов
/ 16 июня 2020

У меня есть таблица foo, где один из столбцов bar типа jsonb, который содержит свойство foo_bar jsonb.

Я хочу получить количество элементов с таким запросом ядра ef:

await dbContext.Foo.CountAsync(x => x.bar.FooBar.Name == "some name");

Ef core генерирует такой запрос:

SELECT COUNT(*)::INT
FROM foo AS f
WHERE f.bar#>>'{FooBar,Name}' = 'SomeName'

У меня это не работает из-за того, что вместо правильного имени свойства foo_bar ef core генерирует FooBar (как мое свойство. net) и вместо name ядро ​​ef генерирует Name.

Если есть способ заставить ядро ​​ef генерировать следующий запрос:

SELECT COUNT(*)::INT
FROM foo AS f
WHERE f.bar#>>'{foo_bar,name}' = 'Production'

Я попытался пометить свое свойство FooBar атрибутом [JsonPropertyName("foo_bar")].

Также я попытался использовать плавный подход:

entity.Property<FooBar>("FooBar").HasColumnName("foo_bar").HasColumnType("jsonb");

Оба они не работают.

Ответы [ 2 ]

1 голос
/ 20 июня 2020

Поддержка [JsonPropertyName] только что добавлена ​​ , и будет работать, начиная с версии 5.0.0-preview6.

0 голосов
/ 16 июня 2020

Я нашел обходной путь - назовите. net свойства, как они указаны в базе данных. Так что в моем случае это было бы. net свойство, например:

public FooBar foo_bar { get; set; }

Выглядит некрасиво, но работает

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