Ich bin ein bisschen neu, um erste Migrationen zu kodieren und es gibt mir Kopfschmerzen ...Wie kann ich den Standardwert einer neuen Tabellenspalte während einer Code-First-Migration festlegen?
Grundsätzlich versuche ich eine neue Tabelle von Werten zu erstellen ('Breeds' in meinem Beispiel). Ich möchte eine Spalte in einer anderen Tabelle 'Hunde' hinzufügen, die eine BreedId enthält, kann nicht null sein und hat einen Standardwert.
Nach einer Menge von faff, habe ich mit dem Code unten endete. (Es hat mir nicht gefallen, den Fremdschlüssel hinzuzufügen, also musste ich das ein wenig kommentieren).
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");
Aber nach einem Update-Datenbank ausgeführt wird, ist das Ergebnis:
ALTER TABLE [dbo].[Dogs] ADD [BreedId] [int] NOT NULL DEFAULT 49
CREATE INDEX [IX_BreedId] ON [dbo].[Dogs]([BreedId])
Wie Sie der Standardwert ‚49‘ hat sich sehen statt ‚1 'und ich habe keine Ahnung, warum. Kann jemand sehen, wo ich falsch liege, oder gibt es einen einfacheren Weg, um das zu erreichen, was ich versuche?
Danke!
Vielleicht passiert etwas seltsames, wenn es die '1' in eine Ganzzahl 1 umwandelt, was es automatisch macht? Haben Sie versucht, die Ganzzahl 1 anstelle von '1' zu verwenden und zu sehen, ob es einen Unterschied macht? – Scotch
Ah ja - das ist es! Die Zitate entfernt und es war in Ordnung (es war ein langer Tag ...). Vielen Dank! – user2584299