2016-11-02 18 views
5

Używam efcore.sqlserver 1.0.1 z narzędziami preview2 - Mam właściwość string, która w serwerze sql jest tworzona jako pole nvchar (max). Gdy dodaję długość opisu adnotacji danych (100) do właściwości i dodaję nową migrację, migracja w ogóle nie zmieni kolumny.Maksymalna długość nie dotyczy migracji

Jednakże jeśli dodać wymagane i StringLength adnotacji wówczas generowany migracja zmienia kolumnę i pokazuje (.. MaxLength: 100, zerowalne: false)

Dlaczego to zrobić tylko w przypadku zmiany wartości zerowalne?

+0

Jak ty generowania migrację? –

+0

dotnet ef Migracje dodaj ... – alanh

+0

Użycie '[Maks. Długość]' zi bez '[Wymagane]' powinno wymusić maksymalną długość właściwości ciągu znaków. Z jakiego operatora korzystasz? Czy możesz podać przykład kodu dla modelu? –

Odpowiedz

4

Uważam, że należy użyć MaxLengthAttribute zamiast StringLengthAttribute.

https://docs.efproject.net/en/latest/modeling/max-length.html#data-annotations

Jest to prawdopodobnie dlatego, że atrybut StringLength posiada opcję minimalnej długości, które nie są obsługiwane natywnie przez SQL, a zatem atrybut MaxLength jest lepsze dopasowanie dla tego przypadku użycia.

Dla jasności atrybuty nie mają żadnego wpływu. Mogą zawierać logikę i informacje, ale muszą być wykorzystywane poprzez odbicie z innego fragmentu kodu podczas normalnego modelu wykonania. Wyjątek stanowią pewne atrybuty nadawane przez kompilatorowi specjalne znaczenie, takie jak atrybut Conditional.

EDIT

Autorka stwierdziła, że ​​jest to znany problem w przypadkach, gdy zestaw narzędzi został uaktualniony z RC2 => RTM.

https://github.com/aspnet/Announcements/issues/195

2

Na szczęście nie ma takiej problem na rdzeniu EF :) Ja testowałem swój scenariusz i to działa dobrze.

Musisz użyć [MaxLength(100)] atrybut that.Here jest doc: MaxLength Data Annotations

przypadek testowy: użyłem MaxLength jako 500 dla mojego testu.

pierwsze Stworzyłem właściwość tak:

public string Title { get; set; } 

Po migracji:

enter image description here

Potem zmieniły się to tak:

[MaxLength(500)] 
public string Title { get; set; } 

Po migracji:

enter image description here

wygenerowanego skryptu:

migrationBuilder.AlterColumn<string>(
       name: "Title", 
       table: "Posts", 
       maxLength: 500, 
       nullable: true); 

Testowana wersja Narzędzia:

<package id="Microsoft.EntityFrameworkCore.Tools" 
version="1.0.0-preview2-final" targetFramework="net461" 
developmentDependency="true" /> 
+0

Pytanie dotyczy "StringLengthAttribute". –

+0

@ ChristopherHarris nie ma czegoś takiego w rdzeniu EF. Proszę zobaczyć https://docs.efproject.net/en/latest/modeling/max-length.html#data-annotations – Sampath

+0

Próbowałem również maxLength też i doesn doesn • generować cokolwiek w Migracji. Myślę, że ma to coś wspólnego z moją konfiguracją. – alanh

Powiązane problemy