Упорядочить столбцы при создании БД с помощью Entity Framework 4.1. с беглым API - PullRequest
5 голосов
/ 08 августа 2011

Я хочу иметь порядок столбцов в моей таблице базы данных после создания БД на основе структуры 4.1.следующим образом:

1) PK 2) все столбцы внешнего ключа 3) все столбцы сложных типов 4) все другие столбцы

Проблема в том, что нет возможности установить Порядок длявнешний ключ с помощью свободного API, как, например, HasColumnOrder для примитивных свойств (все столбцы внешнего ключа являются последними столбцами)

Есть какие-нибудь идеи?

Спасибо

Крис

Ответы [ 4 ]

3 голосов
/ 15 июля 2013

Я знаю, что это старая ветка, но я подумал, что на самом деле отвечу.Я согласен, порядок столбцов в БД не имеет значения.За исключением случаев, когда вы выполняете поиск в БД по данным, может быть полезно сначала иметь логические / полезные поля.

Ответ - с помощью метода .HasColumnOrder (x).Просто введите нулевое число в том порядке, в котором вы хотите, чтобы поле было. Смотрите пример здесь: http://hanksnh.wordpress.com/2011/04/08/inheritance-with-entity-framework-4-1/

1 голос
/ 08 августа 2011

Если вы хотите установить порядок для столбцов внешнего ключа, вы должны представить их как свойства (используйте связь с внешним ключом вместо независимой ассоциации ).Btw.порядок столбцов в таблице базы данных не имеет значения.Имеет значение только порядок столбцов в ключе, и поэтому брат не поддерживает это.

0 голосов
/ 22 декабря 2015

Если вы ищете порядок столбцов, я думаю, это довольно просто. В вашем классе DbContext переопределите OnModelCreating. Затем возьмите модель Builder и вытащите из нее 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);
    }

}

И, наконец, вам нужно добавить миграцию, а затем обновить базу данных.

0 голосов
/ 21 августа 2015

Я решил проблему с порядком столбцов внешнего ключа в базе данных при использовании независимой ассоциации с помощью миграций EF.

Отключите автоматическую миграцию и создайте начальную миграцию для вашей модели данных.

Для модельного класса:

public class Session
{
  public int? Id { get; set; }     
  public Track Track { get; set; }   
  public Car Car { get; set; }    
  public int Event { get; set; }
  public DateTime Date { get; set; }    
  public string Name { get; set; }    
}

будет сгенерирован код миграции:

CreateTable("dbo.Sessions", c => new
{
  Id = c.Int(nullable: false, identity: true),
  Event = c.Int(nullable: false),
  Date = c.DateTime(nullable: false),
  Name = c.String(nullable: false, maxLength: 64),
  Car = c.Int(nullable: false),
  Track = c.Int(nullable: false),
}) ...

Теперь просто измените порядок столбцов внешних ключей (Car, Track), переместив их вверх. Когда вы создаете новую базу данных и открываете таблицу, порядок столбцов будет соответствовать ожидаемому.

...