强制实体框架6(EF6)使用nvarchar(MAX)

Sea*_*ean 1 sql-server entity-framework ef-code-first

我以为这很容易,但是...

您如何强制EF6使用nvarchar(MAX)

我试过了:

[Column(TypeName = "nvarchar(MAX)")]
Run Code Online (Sandbox Code Playgroud)

[Column(TypeName = "nvarchar")]
[MaxLength()]
Run Code Online (Sandbox Code Playgroud)

modelBuilder.Entity<Date>().Property(o => o.test).HasColumnType("nvarchar(MAX)");
Run Code Online (Sandbox Code Playgroud)

我正在使用EF6.2.0和SQL2014 Express

Ste*_*ord 5

如果未指定长度,则EF Code First默认为nvarchar(max),因此,如果指定Name列:

public string Name { get; set; }
Run Code Online (Sandbox Code Playgroud)

您将获得一个nvarchar(max)列。

如果需要指定长度,例如100个字符,则可以在代码中指定列:

[StringLength(50)]
public string Name { get; set; }
Run Code Online (Sandbox Code Playgroud)

如果需要指定varchar而不是nvarchar,则可以使用以下命令:

[Column(TypeName = "VARCHAR")]
[StringLength(50)]
public string Name { get; set; }
Run Code Online (Sandbox Code Playgroud)

请参阅代码优先约定代码优先数据注释列注释

  • 您应该在数据库模型上使用“[MaxLength(100)]”而不是“StringLength”。`StringLength` 用于视图模型上的数据验证。(是的,我知道,它们在这里都可以与 `string` 一起使用)好吧,`StringLength` 不适用于 `byte[]`,只能使用 `MaxLength` 和 `MinLength`。另外,如果您使用“StringLength”(它也适用于视图模型验证),您可能会在视图中使用数据库模型,这是一个糟糕的设计。 (2认同)