2015-01-23 12 views
5

Ich bin mit EF 6.0-Code Erste, und ich habe diese Einheit:Entity Framework ändern Primärschlüssel Typ

public class TrainingRespect 
{ 
    [Key] 
    public int RespectId { get; set; } 

    public DateTime? DateWhenRespected { get; set; } 

    #region 

    public string UserId { get; set; } 
    public User User { get; set; } 

    public Guid TrainingId { get; set; } 
    public Trening Training { get; set; } 

    #endregion 
} 

Und ich möchte es Primary Key (RespectId) von int nach GUID ändern/string/lange.

Was ist der einfachste Weg, dies zu tun? Kann ich einfach den Typ ändern und EF Migrationen werden sich um alles kümmern oder es sollte auf andere Weise gemacht werden?

+0

Sieht aus, als hättest du eine Idee von etwas, was du tun könntest. Hast du es versucht? Die Antwort sollte "Ja" lauten. – JamesT

+0

@JTolley Nein, weil ich zu 99% sicher war, dass die Antwort "nein" sein sollte. Ich hatte einige schlechte Erfahrungen mit älteren EF Versionen. Wie auch immer, nachdem ich Ihren Kommentar gelesen habe, habe ich versucht, ihn von int auf long und string zu ändern, und beide Male habe ich diesen Fehler erhalten: 'Tabellen ohne Clustered-Index werden in dieser Version von SQL Server nicht unterstützt. Erstellen Sie einen gruppierten Index und versuchen Sie es erneut. Constraint konnte nicht gelöscht werden. Siehe vorherige Fehler. Die Anweisung wurde beendet.' – hyperN

+0

Welche Version von SQL Server verwenden Sie? – JamesT

Antwort

2

Ok, um Ihre Frage tatsächlich zu beantworten. Ja Sie können nur den Datentyp ändern und Migrationen sollten sich darum kümmern.

Auf der Grundlage Ihrer Kommentare haben Sie jedoch Probleme beim Anwenden dieser Migration. Dies negiert das obige nicht, aber ich werde versuchen, ein wenig Rätselraten zu nutzen.

Wenn Sie Sql Azure verwenden, müssen Sie Clustered-Indizes für alle Tabellen haben. EF6 sollte Clustered-Indizes sogar für Zeichenfolgenschlüssel erstellen. Es gibt jedoch einen Fehler in Alpha 3, bei dem kein gruppierter Schlüssel in der Migrationstabelle erstellt wird.

http://entityframework.codeplex.com/discussions/435723

den Link oben für eine Beschreibung und eine Abhilfe.

Wenn Sie immer noch Schwierigkeiten haben, können Sie den folgenden Befehl aus dem Paket-Konsole ausführen:

Update-Database -Script 

Dieses ein SQL-Skript anstatt zu versuchen, direkt zu aktualisieren, produzieren. Sie können sich das ansehen und prüfen, ob für die Create Table-Anweisungen kein Clustered-Index vorhanden ist.

Wenn aus irgendeinem Grund nicht. Sie können die CreateTable-Anweisung Ihrer Migration explizit ändern, um den Primärschlüssel zu gruppieren.

CreateTable("MyTable", 
    c => new { 
     Id = c.String(nullable: false, maxLength: 128) 
    }) 
.PrimaryKey(t => t.Id, null, true); 

Auch erwähnenswert: Guids machen schrecklichen Clustered-Indizes. Wenn Sie GUID-Schlüssel verwenden und über die Option verfügen, clustern Sie sie nicht und verwenden Sie stattdessen einen zweiten Clustered-Index.

+2

Für Informationen: die V12-Vorschauversion von Azure ermöglicht Tabellen ohne einen gruppierten Index http://azure.microsoft.com/en-gb/documentation/articles/sql-database-preview-whats-new/ – Colin

+0

Ich habe müde mit fix für Alpha 3 Bug, jetzt werde ich versuchen, auf V12 zu aktualisieren und zu sehen, was passiert, und dann werde ich versuchen, mit -Script-Option, danke für Ihre Antworten – hyperN

Verwandte Themen