2015-07-17 6 views
4

Мне известно о this, в котором говорится, что сначала невозможно создать первичный ключ с некластеризованным индексом. Это все еще так?создать некластеризованный индекс в каркасе первичного ключа 6.0

В идеале, я хотел бы указать через EntityTypeConfiguration, что мой первичный ключ (Guid) имеет некластеризованный индекс и есть другой столбец (int) с кластеризованным индексом.

+0

Возможный дубликат (http://stackoverflow.com/questions/22813137/in-entity-framework-6-1-how-can-i-use-the-indexattribute-to-define-a-clustered) – Korayem

+0

@Korayem, который говорит, что я использую EF 6.1? – cs0815

+0

вы отметили объект entity-framework-6, поэтому я предположил, что 6.1. Я редактировал заголовок и удалял дубликат запроса. – Korayem

ответ

4

AFAIK это невозможно с EntityTypeConfiguration. Однако вы можете сделать это с помощью переходов Code-First. Рабочий пример:

public class Product 
{ 
    public Guid Id 
    { get; set; } 

    public int Price 
    { get; set; } 
} 

class AppDbContext : DbContext 
{ 
    public DbSet<Product> Products 
    { get; set; } 
} 

public partial class InitialCreate : DbMigration 
{ 
    public override void Up() 
    { 
     CreateTable(
      "dbo.Products", 
      c => new 
       { 
        Id = c.Guid(nullable: false), 
        Price = c.Int(nullable: false), 
       }) 
      .PrimaryKey(t => t.Id, clustered: false) 
      .Index(t => t.Price, clustered: true); 

    } 

    public override void Down() 
    { 
     DropIndex("dbo.Products", new[] { "Price" }); 
     DropTable("dbo.Products"); 
    } 
} 

Результат: [? В Entity Framework 6.1, как я могу использовать IndexAttribute определить кластерный индекс]

CREATE TABLE [dbo].[Products] (
    [Id] UNIQUEIDENTIFIER NOT NULL, 
    [Price] INT    NOT NULL, 
    CONSTRAINT [PK_dbo.Products] PRIMARY KEY NONCLUSTERED ([Id] ASC) 
); 

GO 
CREATE CLUSTERED INDEX [IX_Price] 
    ON [dbo].[Products]([Price] ASC); 
+0

Спасибо. Я нашел что-то в этом роде. Я предполагаю, что это все еще так. Я жду немного дольше, прежде чем принять. – cs0815