使用Entity Framework Core 2 Code First创建varchar

时间:2018-02-01 22:12:15

标签: c# entity-framework

我想首先使用代码生成我的SQL Server 2014数据库。表列生成为nvarchar(MAX),但我希望将字符串生成为varchar(50)。

我在模特中尝试的事情:

    [MaxLength(50)]
    public string Name { get; set; }


    [Required]
    [Column(TypeName = "varchar(50)")]
    public string Name { get; set; }


    [Required]
    [MaxLength(50)]
    [Column(TypeName = "varchar(50)")]
    public string FName { get; set; }

这在迁移过程中生成:

Name = table.Column<string>(maxLength: 50, nullable: false)

使用“dotnet ef数据库更新”时,列将创建为nvarchar(MAX)。

我正在使用引用:

Microsoft.VisualStudio.Web.CodeGeneration.Tools Version =“2.0.2” Microsoft.EntityFrameworkCore.Tools.DotNet Version =“2.0.1”

2 个答案:

答案 0 :(得分:1)

现在正在使用[Column(TypeName = "varchar(50)")]

我认为当我删除数据库表并使用SSMS从迁移表中删除迁移时,它实际上并没有删除表,因此看起来它们的创建方式与以前使用nvarchar(MAX)时相同。我刷新了SSMS中的表文件夹。

所以[Column(TypeName = "varchar(50)")]工作正常。

答案 1 :(得分:1)

有同样的问题,但是我使用Fluent API进行配置。 因此,如果您愿意使用Fluent来配置模型,则:

protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder
            .Entity<MyEntity>()
            .Property(x => x.Name)
            .HasMaxLength(50)
            .IsUnicode(false);
    }

由于EF现在知道您不需要Unicode,它将使用VARCHAR而不是NVCHAR。 结合HasMaxLength可以得到您想要的VARCHAR(50)