Entity Framework7迁移:如何获取长度大于1的varchar列?

Entity Framework 7 migration: how to get a varchar column with a length greater than 1?

我有以下内容:

[Table("Countries")]
public class Country
{
    public int CountryId { get; set; }

    [MaxLength(255), Required]
    public string CountryName { get; set; }

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

每次我应用迁移时,CountryCode 都会变成最大长度为 1 的 varchar 列。我尝试将 MaxLength 注释设置为 255,但最大长度仍然为 1。当该列设置为 nvarchar 时,它会起作用正如预期的那样。我做错了什么吗?

编辑:每当我显式设置字符串数据类型时,长度设置为 1。我可以使用 Column(TypeName = "nvarchar")] 并将长度设置为 1..

很想使用数据注释,但我能够使用它:

 builder.Entity<Country>()
            .Property(e = e.CountryCode).HasSqlServerColumnType("VARCHAR(30)");

Data Annotations are not yet fully implemented in Entity Framework 7. You can still add annotations to your entity classes so that they are used by other frameworks (such as ASP.NET MVC), but Entity Framework will not process these annotations. You can track support for Data Annotations on GitHub.

http://ef.readthedocs.org/en/latest/modeling/configuring.html

好的,使用 .net core 2 定位 sql 服务器我遇到了这个问题。我的模型生成器看起来像这样。

            modelBuilder.Entity<StreamCheckpointDto>()
            .Property(e => e.StreamName)
            .HasColumnType("varchar")
            .HasMaxLength(40).IsUnicode(false);

一旦我删除了 HasColumnType 并让它根据我的 StreamCheckpointDto.StreamName 自动选择 varchar 作为字符串,长度就变成了预期的 40。你也可以使用。

.HasColumnType("varchar(40)")

相反。