2016-12-06 3 views
2

Используя ядро ​​Entity Framework, я хочу иметь Guid PK, не страдая страницей fragmentation в базе данных.Создайте некластеризованный индекс в Entity Framework Core

Я видел это post и this. Хотя в EF6 это было возможно, похоже, что это было сделано.

Возможно ли создать некластеризованный первичный ключ в ядре Entity Framework и иметь дополнительный индекс?

Q & A Ответ ниже.

ответ

3

Возможно использование EntityFrameworkCore v1.0.1 или выше.

Следующий код получает желаемый результат:

using System; 
using Microsoft.EntityFrameworkCore; 
using Microsoft.EntityFrameworkCore.Metadata; 

namespace TestApplication.Models 
{ 

    /// <summary> 
    /// The context class. Make your migrations from this point. 
    /// </summary> 
    public partial class TestApplicationContext : DbContext 
    { 
     public virtual DbSet<Company> Companies { get; set; } 

     public TestApplicationContext(DbContextOptions<TestApplicationContext> options) : base(options) 
     { 

     } 

     protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) 
     { 
      // standard stuff here... 
     } 

     protected override void OnModelCreating(ModelBuilder modelBuilder) 
     { 
      modelBuilder.Entity<Company>(entity => 
      { 
       entity.Property<Guid>("CompanyId") 
         .ValueGeneratedOnAdd(); 

       entity.Property<int>("CompanyIndex") 
         .UseSqlServerIdentityColumn() 
         .ValueGeneratedOnAdd(); 

       entity.Property(e => e.CompanyName) 
        .IsRequired() 
        .HasColumnType("varchar(100)"); 

       // ... Add props here. 

       entity.HasKey(e => e.CompanyId) 
        .ForSqlServerIsClustered(false) 
        .HasName("PK_Company"); 
       entity.HasIndex(e => e.CompanyIndex) 
        .ForSqlServerIsClustered(true) 
        .HasName("IX_Company"); 
      }); 
     } 
    } 

     /// <summary> 
     /// The model - put here for brevity. 
     /// </summary> 
     public partial class Company 
     { 
      public Company() 
      { 
      } 

      public Guid CompanyId { get; set; } 
      public int CompanyIndex { get; set; } 

      public string CompanyName { get; set; } 
      // more props here. 
     } 

    } 

Project.json

{ 
    "version": "1.0.0-*", 

    "dependencies": { 
     "Microsoft.EntityFrameworkCore.Design": "1.0.1", 
     "Microsoft.EntityFrameworkCore.SqlServer": "1.0.1", 
     "Microsoft.EntityFrameworkCore.SqlServer.Design": "1.0.1", 
     "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview3-final", 
     "NETStandard.Library": "1.6.0" 
    }, 
    "tools": { 
     "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview3-final", 
     "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final" 
    }, 
    "frameworks": { 
     "netstandard1.6": { 
      "imports": "dnxcore50" 
     } 
    } 
} 
Смежные вопросы