Sto provando a creare un primo modello di codice per Entity Framework 7. Uso la versione beta di Visual Studio 2015 rilasciata di recente e le seguenti versioni di pacchetti EntityFramework (snippet dal mio file project.json):Come creare un indice per una proprietà stringa in Entity Framework 7
"EntityFramework.SqlServer": "7.0.0-beta1",
"EntityFramework.Commands": "7.0.0-beta1",
sembra che in questo momento non sono disponibili le annotazioni di dati e sto usando l'override OnModelCreating e recentemente implementato (in parte) le migrazioni di creare il mio modello?.
Per ora, le chiavi primarie e le relazioni uno-a-uno funzionano come pure gli indici per i tipi interi. Per esempio:
builder.Entity<Article>(e =>
{
e.Key(c => c.Id);
e.OneToOne<Category>(c => c.Category);
e.Index(c => c.Time).IsUnique(false);
});
risultati Questo frammento di codice seguente migrazioni da generare:
migrationBuilder.CreateTable("Article",
c => new
{
Id = c.String(),
// ...
CategoryIdKey = c.Int(nullable: false),
Time = c.DateTime(nullable: false),
// ...
})
.PrimaryKey("PK_Article", t => t.Id)
.UniqueConstraint("UC_Article_CategoryIdKey", t => t.CategoryIdKey);
migrationBuilder.AddForeignKey("Category", "FK_Category_Article_CategoryId", new[] { "CategoryId" }, "Article", new[] { "CategoryIdKey" }, cascadeDelete: false);
migrationBuilder.CreateIndex("Article", "IX_Article_Time", new[] { "Time" }, isUnique: false, isClustered: false);
Ma quando sto cercando di aggiungere indice proprietà di stringa, viene generato la migrazione, ma quando applicate viene rifiutato da SQL Server, apparentemente a causa del tipo di colonna nvarchar (MAX). Sembra che lo .Required().MaxLength(100)
non imponga la generazione limitata del tipo di colonna di stringhe. E se c'è un metodo per cambiare il tipo di colonna, io non riesco a trovare il modo per chiamare attraverso ModelBuilder:
builder.Entity<Keyword>(e =>
{
e.Key(c => c.Id);
e.Property(c => c.Word).Required().MaxLength(100);
e.Index(c => c.Word).IsUnique(true);
});
migrazione risultante:
migrationBuilder.CreateTable("Keyword",
c => new
{
Id = c.Int(nullable: false, identity: true),
Word = c.String(nullable: false, maxLength: 100)
})
.PrimaryKey("PK_Keyword", t => t.Id);
migrationBuilder.CreateIndex("Keyword", "IX_Keyword_Word", new[] { "Word" }, isUnique: true, isClustered: false);
C'è un modo per creare un indice sulla proprietà stringa nella versione beta di EF7?
BTW, Ho anche archiviato [# 1071] (https://github.com/aspnet/EntityFramework/issues/1071). – bricelam