.NET Core-迁移Fluent API HasColumnType

时间:2019-05-23 17:59:11

标签: sql-server postgresql .net-core ef-migrations

我正在将.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)");

对不起,我的英语不太好。

3 个答案:

答案 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);