Zasadniczo mam tabelę w mojej bazie danych EF z następującymi właściwościami:
public int Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public string Image { get; set; }
public string WatchUrl { get; set; }
public int Year { get; set; }
public string Source { get; set; }
public int Duration { get; set; }
public int Rating { get; set; }
public virtual ICollection<Category> Categories { get; set; }
Działa dobrze, jednak gdy zmieniam wartość int Rating na podwójną, podczas aktualizacji bazy danych pojawia się następujący błąd:
Obiekt „DF_ Movies _Rating__48CFD27E” zależy od kolumny „Rating”. ALTER TABLE ALTER COLUMN Ocena nie powiodła się, ponieważ co najmniej jeden obiekt uzyskuje dostęp do tej kolumny.
W czym problem?
sql
sql-server
database
entity-framework
entity-framework-4
Jordan Axe
źródło
źródło
Odpowiedzi:
Spróbuj tego:
Usuń ograniczenie DF_Movies_Rating__48CFD27E przed zmianą typu pola.
Ograniczenie jest zwykle tworzone automatycznie przez DBMS (SQL Server).
Aby zobaczyć ograniczenie skojarzone z tabelą, rozwiń atrybuty tabeli w Eksploratorze obiektów , a następnie kategorię Ograniczenia, jak pokazano poniżej:
Przed zmianą typu pola należy usunąć ograniczenie.
źródło
update-database
To jest
tsql
drogaAby uzyskać kompletność, jako odpowiedź pokazuje tylko komentarz @Joe Taras
źródło
Dodam to jako odpowiedź, aby wyjaśnić, skąd pochodzi ograniczenie. Próbowałem to zrobić w komentarzach, ale tam ciężko jest ładnie edytować: - /
Jeśli utworzysz (lub zmienisz) tabelę z kolumną, która ma wartości domyślne, utworzy ograniczenie za Ciebie.
Na przykład w Twojej tabeli może to być:
Utworzy ograniczenie dla domyślnych 100.
Jeśli zamiast tego utworzysz go w ten sposób
Następnie otrzymujesz ładnie nazwane ograniczenie, które jest łatwiejsze do odniesienia, gdy zmieniasz wspomnianą tabelę.
Możesz połączyć te ostatnie 2 instrukcje, aby zmienić kolumnę i nazwać ograniczenie w jednej linii (musisz to zrobić, jeśli i tak jest to istniejąca tabela)
źródło
Ponieważ ograniczenie ma nieprzewidywalną nazwę, możesz napisać specjalny skrypt ( DropConstraint ), aby go usunąć bez znajomości jego nazwy (zostało przetestowane w EF 6.1.3):
źródło
MS SQL Studio zajmie się usunięciem kolumny, ale jeśli chcesz programowo usunąć ograniczenie, tutaj jest proste rozwiązanie
Oto fragment kodu, który usunie kolumnę z domyślnym ograniczeniem:
Wystarczy zastąpić TableName i NazwaKolumny z odpowiednimi wartościami. Możesz to bezpiecznie uruchomić, nawet jeśli kolumna została już upuszczona.
Bonus : Oto kod do usuwania kluczy obcych i innych typów ograniczeń.
Blog
źródło
Kiedy próbujemy usunąć kolumnę, od której zależy, widzimy taki błąd:
usuń ograniczenie, które jest zależne od tej kolumny:
Przykład:
Porzuć ograniczenie (DF__Employees__Colf__1273C1CD):
Następnie możesz upuścić kolumnę:
źródło
Rozwiązanie :
otwórz tabelę bazy danych -> rozwiń tabelę -> rozwiń ograniczenia i zobacz to
źródło
Wystąpił ten błąd podczas próby uruchomienia migracji w celu obejścia tego problemu. Zmieniłem nazwę kolumny i ponownie wygenerowałem migrację przy użyciu
w konsoli menedżera pakietów. Wtedy mogłem biegać
z powodzeniem.
źródło