Ich versuche, ein Code-erstes Modell für Entity Framework 7 zu erstellen. Ich verwende kürzlich veröffentlichte Visual Studio 2015 Beta und die folgenden Versionen von EntityFramework-Pakete (Snippet aus meiner project.json-Datei):Wie erstellt man einen Index für eine String-Eigenschaft in Entity Framework 7
"EntityFramework.SqlServer": "7.0.0-beta1",
"EntityFramework.Commands": "7.0.0-beta1",
Es sieht aus wie zur Zeit keine Daten Anmerkungen verfügbar sind, und ich bin die OnModelCreating Überschreibung und vor kurzem implementiert (teilweise) Migrationen mein Modell zu schaffen?.
Momentan funktionieren Primärschlüssel und Eins-zu-eins-Beziehungen genauso wie das Erstellen von Indizes für ganzzahlige Typen. Zum Beispiel:
builder.Entity<Article>(e =>
{
e.Key(c => c.Id);
e.OneToOne<Category>(c => c.Category);
e.Index(c => c.Time).IsUnique(false);
});
Dieser Code-Schnipsel Ergebnisse in der folgenden Migrationen Code erzeugt werden:
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);
Aber wenn ich versuche Index String-Eigenschaft hinzuzufügen, wird die Migration erzeugt, aber bei der Anwendung wird von SQL Server abgelehnt, offensichtlich aufgrund des Spaltentyps nvarchar (MAX). Es scheint so, als ob die .Required().MaxLength(100)
die Erzeugung begrenzter String-Spalten nicht erzwingt. Und obwohl es ein Verfahren ist, den Spaltentyp zu ändern, kann ich nicht scheinen, um die Art und Weise zu finden, sie durch Modelbuilder zu nennen:
builder.Entity<Keyword>(e =>
{
e.Key(c => c.Id);
e.Property(c => c.Word).Required().MaxLength(100);
e.Index(c => c.Word).IsUnique(true);
});
resultierende Migration:
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);
Gibt es eine Möglichkeit, einen Index zu erstellen auf String-Eigenschaft in der Beta-Version von EF7?
BTW, ich habe auch eingereicht [# 1071] (https://github.com/aspnet/EntityFramework/issues/1071). – bricelam