kodu w moim początkowym migracji był następującyEF migracja: Błąd zmianę pola indeksowanego do pustych
CreateTable( "dbo.Sites", c => new { Id = c.Int(nullable: false, identity: true), Description = c.String(maxLength: 450) }) .PrimaryKey(t => t.Id);
więc, że pole Opis byłby wyjątkowy I dodaje następujące do końca Metoda UP
CreateIndex ("dbo.Sites", "Description", unique: true);
Później postanowiłem wprowadzić pole Opis.
nowej migracji generuje następstwie zmian
AlterColumn ("dbo.Sites", "Opis", c => c.String (pustych false, MAXLENGTH 450));
Jednak gdy zmiana ta próbuje uruchomić pojawia się błąd
ALTER TABLE ALTER COLUMN Opis powiodła się, ponieważ jeden lub więcej obiektów dostęp do tej kolumny.
udało mi się wyizolować linię SQL za pomocą profilera, jak
ALTER TABLE [dbo]. [Kultu] ALTER COLUMN [Opis] nvarchar NOT NULL
Który daje mi następujący błąd po uruchomieniu go w Studio Zarządzania
Msg 5074, Poziom 16, Stan 1, Linia 1 Indeks " IX_Opis "zależy od kolumny" Opis ". Msg 4922, Poziom 16, Stan 9, Wiersz 1 ALTER TABLE ALTER COLUMN Opis nie powiodło się, ponieważ jeden lub więcej obiektów ma dostęp do tej kolumny.
Jak mogę usunąć kod migracyjny z indeksu, a następnie zmienić kolumnę, a następnie ponownie zbudować indeks?
Używam programu SQL Server 2008 R2
Używanie unikalnego indeksu z kolumną zerowalną jest dziwne. Wartość Null jest taka, jak każda inna, więc tylko JEDEN rekord będzie miał wartość Null, w przeciwnym razie otrzymasz wyjątkowe naruszenie ograniczenia. –
Chociaż NULL! = NULL, ale nie sądzę, że ostatnio wypróbowałem go sam - warto to sprawdzić. – Mark
Chcę, aby puste było poprawną opcją w polu kombi. Czy powinienem mieć wartość Null lub pusty ciąg znaków? –