Próbuję utworzyć pierwszy model kodu dla Entity Framework 7. Używam ostatnio wydanego Visual Studio 2015 Beta i następujących wersji pakietów EntityFramework (urywek z mojego pliku project.json):Tworzenie indeksu dla właściwości ciągu w Entity Framework 7
"EntityFramework.SqlServer": "7.0.0-beta1",
"EntityFramework.Commands": "7.0.0-beta1",
wygląda na to żadnych adnotacji danych są dostępne i używam nadpisanie OnModelCreating a ostatnio wdrożone (częściowo) migracje do tworzenia mojego modelu?.
Na razie działają klucze podstawowe i relacje jeden-do-jednego, jak również tworzenie indeksów dla typów całkowitych. Na przykład:
builder.Entity<Article>(e =>
{
e.Key(c => c.Id);
e.OneToOne<Category>(c => c.Category);
e.Index(c => c.Time).IsUnique(false);
});
Wyniki tego fragmentu w poniższym kodzie migracje mają być generowane:
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);
Ale gdy próbuję dodać indeks właściwości String, migracja jest generowany, ale po nałożeniu jest odrzucany przez SQL Server, najwyraźniej ze względu na typ kolumny będący nvarchar (MAX). Wygląda na to, że .Required().MaxLength(100)
nie wymusza generowania ograniczonego typu kolumny ciągów. I choć nie jest to metoda, aby zmienić typ kolumny, nie wydaje się znaleźć sposób, aby połączyć je poprzez 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);
});
W wyniku migracji:
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);
Czy istnieje sposób, aby utworzyć indeks na własności string w wersji beta EF7?
BTW, ja też złożyć [# 1071] (https://github.com/aspnet/EntityFramework/issues/1071). – bricelam