2015-01-23 26 views
5

sto usando EF 6.0 Codice primo luogo, e ho questa entità:Entity Change Framework chiave primaria Tipo

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 
} 

E vorrei cambiare è chiave primaria (RespectId) da int a GUID/string/lungo.

Qual è il modo più semplice per farlo? Posso semplicemente cambiare tipo e le migrazioni EF si prenderanno cura di tutto o dovrebbero essere fatte in un altro modo?

+0

Sembra che tu abbia un'idea di qualcosa che potresti fare. L'hai provato? La risposta dovrebbe essere "sì". – JamesT

+0

@JTolley No, perché ero sicuro al 99% che la risposta fosse "no". Ho avuto alcune esperienze negative prima con le versioni precedenti di EF con questo. Comunque dopo aver letto il tuo commento ho provato a cambiarlo da int a long e string, ed entrambe le volte ho ottenuto questo err: 'Tabelle senza indice cluster non sono supportate in questa versione di SQL Server. Si prega di creare un indice cluster e riprovare. Impossibile eliminare il vincolo. Vedi errori precedenti. La dichiarazione è stata chiusa. – hyperN

+0

Quale versione di SQL Server stai usando? – JamesT

risposta

2

Ok per rispondere effettivamente alla tua domanda. è sufficiente modificare il tipo di dati e le Migrazioni dovrebbero occuparsene.

Tuttavia in base ai tuoi commenti non riesci ad applicare questa migrazione. Questo non nega quanto sopra, ma cercherò di aiutare a usare un po 'di congetture.

Se si sta utilizzando Sql Azure, è necessario disporre di indici cluster su tutte le tabelle. EF6 dovrebbe creare indici cluster anche su chiavi stringa. C'è un bug con alpha 3 anche se non crea una chiave cluster nella tabella delle migrazioni.

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

Vedi il link qui sopra per una descrizione e una soluzione.

Se hai ancora problemi, è possibile eseguire il seguente comando dalla console del pacchetto:

Update-Database -Script 

questo produrrà uno script SQL invece di cercare di aggiornare direttamente. Puoi guardare questo e vedere se una qualsiasi delle istruzioni Create Table non ha un indice cluster su di esse.

Se, per qualche motivo, non ci sono. È possibile modificare in modo esplicito l'istruzione CreateTable della migrazione per rendere la chiave primaria in cluster.

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

vale la pena anche notare: GUID fanno terribili indici cluster. Se stai utilizzando le chiavi GUID e hai l'opzione, non raggrupparle su di esse e avere invece un secondo indice cluster.

+2

Per informazioni: la versione di anteprima V12 di Azure consente tabelle senza un indice cluster http://azure.microsoft.com/en-gb/documentation/articles/sql-database-preview-whats-new/ – Colin

+0

Mi sono stancato con correzione per alpha 3 bug, ora ho intenzione di provare ad aggiornare a V12 e vedere cosa succede, e che proverò con l'opzione -Script, grazie per le vostre risposte – hyperN

Problemi correlati