我正在将.NET CORE 2.2和EF CORE用于SQLSERVER和PostgreSQL。
在postgresql中不像在SQLSERVER上那样存在varchar(max)或varchar(-1),在postgresql中,数据类型为TEXT。
在此列上,对于SQL Server,我需要使用varchar(max);对于Postgres,我需要使用它作为文本。如何实现?
每个提供商都必须了解这种迁移。
感谢您的帮助。
builder.Property(x => x.Foo).HasColumnType("varchar(-1)");
对不起,我的英语不太好。
答案 0 :(得分:3)
字符串的默认ColumnType将自动映射到“最大长度”字段。因此省去了列类型,您应该会得到所需的内容。
Food
答案 1 :(得分:0)
我不知道您使用的是数据库优先还是代码优先的方法
对于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
让我知道这是否有帮助。
答案 2 :(得分:0)
如前所述,使用默认值应该可以为您提供所需的内容,即文本列的最大长度。
builder.Property(x => x.Foo)
但是,如果您想明确表示而不使用默认值,则可以使用以下内容:
builder.Property(x => x.Foo).HasColumnType("nvarchar(max)");
如果您只想更改最大长度,此api也可用:
builder.Property(x => x.Foo).HasMaxLength(50);