0

我正在创建下表(通过在 EF7 中使用 DNX 命令,现在是 EF Core)

[Table("FishGrade")]
public partial class FishGrade
{
    public FishGrade()
    {
        FishPrices = new HashSet<FishPrice>();
    }

    [HiddenInput]
    [Column("FishGradeId")]
    public int Id { get; set; }

    [Column("GradeCode")]
    [MaxLength(5), Required]
    public string Code { get; set; }

    [Column("GradeName")]
    public string Name { get; set; }

    public string IsActive { get; set; }

    public virtual ICollection<FishPrice> FishPrices { get; set; }
}

但是在创建表时,代码列(名为=GradeCode 的列)被创建为 1 个字符长的列。

OnModelCreating我在方法中也有以下内容

 modelBuilder.Entity<FishGrade>(entity =>
        {
            entity.Property(e => e.Code)
                .HasColumnType("char");

            entity.Property(e => e.Name)
                .IsRequired()
                .HasMaxLength(50);

            entity.Property(e => e.IsActive)
                .HasMaxLength(1)
                .HasColumnType("char");
        });

为什么会这样?如何获得长度 = 5 的列?

4

1 回答 1

0

您可以通过三种方式定义模型:

  • 公约
  • 属性
  • 流畅的 API

首先应用约定,然后是属性,最后是模型构建器中的流式 API。您的模型构建器正在重置属性配置。

您应该尝试简化模型配置并始终使用相同的方法。

注意:请注意,如果您使用诸如 MVC 客户端验证之类的东西,它只能理解通过属性进行的配置。在所有其他方面,它并不介意您如何配置 EF 模型。

于 2016-02-05T10:13:05.283 回答