2016-12-15 6 views
1

Я занимаюсь разработкой существующей базы данных Postgres с Npgsql и EF Core. Вещи кажутся, по крайней мере, в основном на месте, за исключением того, что я заметил, что ни один из моих столбцов диапазона диапазона не присутствует. Это не слишком удивительно, учитывая, что у C# нет типа данных, которое было бы естественно аналогичным.Тип диапазона с Npgsql

Кажется, что есть какая-то поддержка, основанная на этой теме https://github.com/npgsql/npgsql/issues/126, и примечания здесь http://www.npgsql.org/dev/types.html, но до сих пор я не мог найти никаких подробностей о том, как реализовать что-либо.

Редактировать: Я нашел тип NpgsqlRange, но получаю ошибку 'NpgsqlRange<int>' which is not supported by current database provider. У меня есть встроенный модулятор с .HasColumnType("int4range").

ответ

1

Npgsql полностью поддерживает диапазоны PostgreSQL на уровне ADO.NET, но провайдер Core Entity Framework не включает поддержку для этого (честно говоря, никто не запрашивал его, поскольку использование диапазона кажется немного редкими). An issue is already open for this, я постараюсь сделать это для 1.2.

+0

Хорошо, спасибо за ответ. В то же время, какое лучшее решение? Есть ли способ, которым я могу использовать значение defaultvalue или computedvalue или что-то подобное, чтобы построить значение диапазона при записи в базу данных? Мне действительно не нужно читать какие-либо типы диапазонов, мне просто нужно их написать. постскриптум Я также заметил, что мои столбцы перечисления отсутствуют, но, надеюсь, я просто смогу реализовать их как строки. – user3747260

+0

У вас всегда есть возможность управлять диапазонами вне EF Core, то есть с использованием необработанного SQL. Если вы используете EF Core для создания своих таблиц, вы можете добавить SQL в свои миграции, чтобы изменить таблицу и добавить столбец диапазона, а затем вы можете просто использовать SQL в режиме экономии времени для заполнения диапазона. Энумы, к сожалению, еще менее поддерживаются, и все выглядит не так хорошо, поскольку требуются значительные изменения в ядре EF Core (см. Https://github.com/npgsql/Npgsql.EntityFrameworkCore.PostgreSQL/issues/27) –

+0

Таблица с моим типом диапазона находится в середине иерархии наследования и имеет внешний ключ, который относится к таблицам выше и ниже его в иерархии. Есть ли лучший способ написать данные диапазона, кроме запроса после 'SaveChanges()', чтобы получить список всех идентификаторов, а затем итерации по списку и индивидуального выполнения операторов обновления, где id = id? К сожалению, я довольно новичок в работе с базами данных в .NET. – user3747260