.NET Core - свободно распространяемый API-интерфейс HasColumnType - PullRequest
5 голосов
/ 23 мая 2019

Я использую .NET CORE 2.2 и EF CORE для SQLSERVER и PostgreSQL.

В postgresql не существует varchar (max) или varchar (-1), как в SQLSERVER, в postgresql тип данныхis TEXT.

В этом столбце мне нужно, чтобы он был varchar (max) для SQL-сервера и текст для Postgres., Как это можно сделать?

Эту миграцию необходимо пониматькаждым провайдером.

Я ценю вашу помощь.

builder.Property(x => x.Foo).HasColumnType("varchar(-1)");

извините, мой английский не очень хорош.

Ответы [ 3 ]

3 голосов
/ 06 июня 2019

Значение ColumnType строки по умолчанию автоматически сопоставляется с полем Max length. так что, не указав тип столбца, вы должны получить то, что хотите.

builder.Property(x => x.Foo)

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

Как указывалось ранее, использование значения по умолчанию должно дать вам то, что вы хотите, то есть максимальную длину вашего текстового столбца.

builder.Property(x => x.Foo)

Однако, если вы хотите быть явным и не использовать значения по умолчанию, выможет использовать что-то вроде этого:

builder.Property(x => x.Foo).HasColumnType("nvarchar(max)");

Если вы хотите изменить только максимальную длину, этот API также доступен:

builder.Property(x => x.Foo).HasMaxLength(50);
0 голосов
/ 23 мая 2019

Я не знаю, какой подход вы используете, если сначала подходит база данных или код сначала

  • Для базы данных первый: вы можете просто запустить приведенный ниже скрипт в консоли диспетчера пакетов и убедиться, что он установленпроект по умолчанию, в котором вы хотите импортировать

для MSSQL

Scaffold-DbContext "Server=xxxxxx;Database=TestDatabase;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -F -OutputDir Models

Приведенное выше сгенерирует практически все свойства таблиц


Для Postgres

 Scaffold-DbContext "{YourConnectionString}" Npgsql.EntityFrameworkCore.PostgreSQL -F -OutputDir Models

Дайте мне знать, если это поможет.

...