2016-07-22 35 views
6
Ben "dotnet vadede" hem IDE ve konsol penceresi yürüttükten sonra, benim Mac üzerinde Visual Studio Kod aşağıdaki alırsınız

bulamıyorum BulunamadıAsp.net Çekirdek Varlık Framework IndexAttribute

Code First ile bir veritabanı oluşturmak için kullanmak istediğim Story adlı bir dersim var. Bu sınıf, KeyAttribute ve MaxLengthAttribute ile işaretlenmiş Yazar dizesiyle işaretlenmiş bir birincil anahtara sahiptir, bu nedenle her ikisi de çalışır (System.ComponentModel.DataAnnotations kullanarak). Daha fazla iki alan, DateTime Date ve bool IsPublished, IndexAttribute uygulamasına sahip (iki sütunlu bir dizin). Açıkça IX_DatePublished, IsUnique = false olarak adlandırdım ve Tarih alanı için Order = 1'i ve IsPublished alanı için Order = 2'yi kullanıyorum.

  • "dotnet restore" işlevini çalıştırmadan önce, IndexAttribute öğesinin işe yaraması için doğru şeyleri kullanmasını sağlamak için ne proj.json içine koyarım?
  • EF, Mac/Linux için ASPCore1 ile birlikte verilen doğru ad alanına sahip değil mi?

Teşekkür ederiz!

cevap

9

Hala Çekirdek araçları hakkında bilgi sahibi olmaya devam ediyorum; Daha fazla araştırma, bu özelliğin desteklenmediğini, ancak bir çekme isteğini ele alacağını ortaya koydu.

https://github.com/aspnet/EntityFrameworkCore/issues/4050

IndexAttribute yokluğunda Kod İlk modellere dizinleri eklemek için iş çevresinde

önerilen yol Varlık Framework Akıcı API kullanmaktır.

/// <summary> 
    /// Creates database structure not supported with Annotations using Fluent syntax. 
    /// </summary> 
    /// <param name="optionsBuilder">The configuration interface.</param> 
    protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Story>().HasIndex(
      story => new { story.Date, story.Published }).IsUnique(false); 
    } 

Bu Story.Date için iki sütunlu dizin oluşturur ve bu benzersiz değil Story.Published: Örneğin şu (DBContext türetilmiştir) sizin bağlamda eklenebilir. Bu değişiklikle takiben kullanım:

dotnet ef migrations add <name> 
dotnet ef database update 

Bu indeks oluşturmak için oluşturulan Göç kodunun ne tür ilginçtir var (bunun yerine Bağlam sınıfına kod ekleme dizini oluşturmak için doğrudan geçişleri özelleştirmek için bu kullanabilirsiniz) : bu tür labors

protected override void Up(MigrationBuilder migrationBuilder) 
{ 
    migrationBuilder.CreateTable(
     name: "Stories", 
     columns: table => new 
     { 
      Id = table.Column<int>(nullable: false) 
       .Annotation("Autoincrement", true), 
      Author = table.Column<string>(maxLength: 64, nullable: true), 
      Date = table.Column<DateTime>(nullable: false), 
      Published = table.Column<bool>(nullable: false), 
      Title = table.Column<string>(nullable: true) 
     }, 
     constraints: table => 
     { 
      table.PrimaryKey("PK_Stories", x => x.Id); 
     }); 

    migrationBuilder.CreateIndex(
     name: "IX_Stories_Date_Published", 
     table: "Stories", 
     columns: new[] { "Date", "Published" }); 
} 

meyve:

SQLiteStudio showing the generated table