将Entity Framework代码中的SQL Server数据库字母列排序更改为顺序

时间:2015-11-17 08:17:59

标签: entity-framework-core

我需要先在代码中关闭字母顺序。

这是我的课程简化

public class Person
{
    [Key,Column("PersonId")]
    public int Id { get; set; }
    [MaxLength(50)]
    public string PersonName{ get; set; }
    public DateTime? JoinDate{ get; set; }
    public int? Gender{ get; set; }
}

当我运行命令生成数据库时

dnx ef migrations add InitialMigration
dnx ef  database update

当我在SQL Server 2012中以设计模式查看时,除主键之外的数据库列按字母顺序生成。

如何强制它按照班级中出现的顺序创建列。

我查看了github并且只能找到this这个问题并没有解释如何将其关闭。

2 个答案:

答案 0 :(得分:3)

EF7迁移中没有这种行为的一流支持。您可以通过显式指定SQL迁移操作来解决此问题。

这意味着您不需要在迁移中使用“CreateTable”方法,而是需要显式编写SQL。

migrationBuilder.Sql("CREATE TABLE Person ...");

答案 1 :(得分:-1)

如果您正在寻找列顺序,我认为它非常简单。在DbContext类中,重写OnModelCreating。然后抓住modelBuilder,从中拉出EntityTypeConfiguration。然后使用它按如下方式配置订单。

public class AppDbContext : IdentityDbContext<AppUser, AppRole, int, AppUserLogin, AppUserRole, AppUserClaim>
{
    public AppDbContext() : base("AvbhHis")
    {

    }

    public DbSet<PatientCategory> Product { get; set; }
    public DbSet<LookupBase> LookupBase { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {

        modelBuilder
            .Entity<PatientCategoryLookup>()
            .Map<PatientCategoryLookup>(m =>
            {
                m.ToTable("LookupPatientCategory");
                m.MapInheritedProperties();
            });
        EntityTypeConfiguration<PatientCategoryLookup> config = modelBuilder.Entity<PatientCategoryLookup>();
        config.Property(e => e.Id).HasColumnOrder(0);
        config.Property(e => e.PatientCatgCode).HasColumnOrder(1);
        config.Property(e => e.PatientCatgName).HasColumnOrder(2);
        config.Property(e => e.Description).HasColumnOrder(3);
        config.Property(e => e.ModifiedTime).HasColumnOrder(4);
        config.Property(e => e.History).HasColumnOrder(5);

        base.OnModelCreating(modelBuilder);
    }

}

然后你需要添加迁移然后更新数据库。