2013-07-15 6 views
7

Jestem trochę nowy, aby zakodować pierwsze migracje i daje mi to ból głowy ...Jak ustawić domyślną wartość nowej kolumny tabeli podczas migracji kodu po raz pierwszy?

Zasadniczo próbuję stworzyć nową tabelę wartości ("Breeds" w moim przykładzie). Chcę dodać kolumnę w innej tabeli "Psy", która posiada identyfikator BreedId, nie może być pusta i ma wartość domyślną.

Po wielu niespodziankach, znalazłem poniższy kod. (Nie podoba mi się dodanie obcego klucza, więc musiałem to skomentować).

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"); 

Ale po uruchomieniu Update Database, wynik jest:

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

Jak widać wartość domyślna stała „49” zamiast „1'and nie mam pojęcia dlaczego. Czy ktoś może zobaczyć, gdzie idę źle, lub czy istnieje łatwiejszy sposób osiągnięcia tego, co próbuję zrobić?

Dzięki!

+0

Może dzieje się coś dziwnego, gdy rzutuje "1" na liczbę całkowitą 1, co automatycznie? Czy próbowałeś używać liczby całkowitej 1 zamiast "1" i widziałeś, czy to robi różnicę? – Scotch

+0

Ach tak - to wszystko! Usunięto cytaty i było w porządku (musiał być długi dzień ...). Dziękuję Ci! – user2584299

Odpowiedz

8

Wysyłanie odpowiedzi dzięki Szkotowi, usunięcie cytatów, wtedy domyślna wartość jest ustawiona poprawnie. Podobnie jak:

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