2013-07-15 8 views
7

Sono un po 'nuovo per la prima migrazione del codice e mi sta dando mal di testa ...Come posso impostare il valore predefinito di una nuova colonna della tabella durante le migrazioni Code-First?

Fondamentalmente, sto cercando di creare una nuova tabella di valori ("Razze" nel mio esempio). Voglio aggiungere una colonna in un'altra tabella 'Dogs' che contiene un BreedId, non può essere nullo e ha un valore predefinito.

Dopo un sacco di falsi, ho finito con il codice qui sotto. (Non mi piaceva l'aggiunta della chiave esterna, quindi ho dovuto commentare quel po ').

CreateTable(
      "dbo.Breeds", 
      c => new 
      { 
       Id = c.Int(nullable: false, identity: true), 
       Name = c.String(nullable: false), 
      }) 
      .PrimaryKey(t => t.Id); 


Sql("SET IDENTITY_INSERT [dbo].[Breeds] ON"); 
Sql("INSERT into [dbo].[Breeds] ([Id], [Name]) VALUES ('1', 'Long Hair')"); 
Sql("SET IDENTITY_INSERT [dbo].[Breeds] OFF"); 

AddColumn("dbo.Dogs", "BreedId", c => c.Int(nullable: false, defaultValue: '1')); 
//AddForeignKey("dbo.Dogs", "BreedId", "dbo.Breeds", "Id"); 
CreateIndex("dbo.Dogs", "BreedId"); 

Ma dopo l'esecuzione di Update-Database, il risultato è:

ALTER TABLE [dbo].[Dogs] ADD [BreedId] [int] NOT NULL DEFAULT 49 
CREATE INDEX [IX_BreedId] ON [dbo].[Dogs]([BreedId]) 

Come si può vedere il valore di default è diventato '49' al posto di '1'e Non ho idea del perché. Qualcuno può vedere dove sto andando male, o c'è un modo più semplice per ottenere ciò che sto cercando di fare?

Grazie!

+0

Forse qualcosa di strano sta accadendo quando sta lanciando il "1" in un numero intero 1, che fa automaticamente? Hai provato a utilizzare il numero intero 1 invece di "1" e hai visto se fa la differenza? – Scotch

+0

Ah sì - è così! Rimosso le virgolette e andava bene (deve essere stata una lunga giornata ...). Grazie! – user2584299

risposta

8

Registrare la risposta grazie a Scotch, rimuovere le virgolette, quindi il valore predefinito è impostato correttamente. In questo modo:

AddColumn ("dbo.Dogs", "BreedId", c => c.Int (nullable: false, defaultValue: 1));