2012-06-27 4 views
35

Szukałem w Internecie, próbując znaleźć odpowiednią składnię, aby uzyskać kod struktury Entity Najpierw stwórz mój tabelę z kolumną: varchar (max).Jak ustawić kolumnę w programie SQL Server na varchar (max) przy użyciu Adnotacji danych kodu źródłowego ASP.net EF?

To jest to, co mam. Domyślnie tworzy to varchar (128). Jak utworzyć varchar (max)?

Próbowałem [MaxLength] bez powodzenia.

Każda pomoc zostanie doceniona. Dzięki!

[Column(TypeName = "varchar")] 
public string MediaDesc { get; set; } 
+4

'[Column (TypeName =" varchar (MAX) ")]" działa dla mnie. Ale otrzymuję 'varchar (8000)' z twoim fragmentem kodu, a nie 'varchar (128)' jak mówisz. Dziwne. Jakiej wersji EF używasz i jakiej wersji bazy danych? – Slauma

+0

Dzięki Slauma. Ryciny Próbowałem różnych sposobów, z wyjątkiem tych najbardziej oczywistych. Działa jak marzenie! – Maddhacker24

+0

Jeśli prześlesz to jako odpowiedź, zaakceptuję. Jeszcze raz! – Maddhacker24

Odpowiedz

58
[Column(TypeName = "varchar(MAX)")] 

Niespodziewanie najbardziej oczywiste rozwiązanie działa.

[MaxLength] tworzy atrybut tylko kolumnę varchar o maksymalnej długości, które nie jest Max, ale - w moim przypadku (SQL Server Express 2008 R2) - 8000.

+0

thx again Slauma – Maddhacker24

+0

** zmień rozmiar kolumny za pomocą pierwszej metody bazy danych ** :, użyłem tego w sql aby zmienić rozmiar z nvarchar (50) na max: 'alter table Produkt alter kolumna WebSite nvarchar (max) null' Uwaga: nie wpłynie to na właściwość modelu, ale jeśli zmienisz nazwę kolumny na nową nazwę, to wpłynie to na model z błędem, wtedy możesz użyć opcji "model aktualizacji z bazy danych" lub usuń plik '.edmx' i odtwórz go. Nadzieja pomaga komuś. – stom

+1

Dla długości ciągu MAX działa dobrze, ale jeśli chcesz podać konkretną długość ciągu w linii, zaczyna się to nie udać. Ten [Column ("ToDoItem", TypeName = "nvarchar (2000)") nie zadziała i nie powiedzie się z naprawdę tajemniczymi błędami, które nie dają żadnej wskazówki, co dzieje się za kulisami. W przypadku MAX nvarchar length nie musisz osobno podawać atrybutu stringLength. Jestem na EF 6 btw. – RBT

2

Użyj adnotacji [Maks. Długość].

[Column(TypeName = "varchar")] 
[MaxLength] 
public string MediaDesc { get; set; } 
+5

Dla mnie tworzy to kolumnę 'varchar (8000)', a nie 'varchar (MAX)'. – Slauma

+2

MaxLength jest walidacją, a nie definicją kolumny –

10

To będzie Ci nvarchar(max):

[StringLength(int.MaxValue)] 

nie sądzę, nie ma atrybut zmusić non-unicode (czy na pewno chcesz to?), więc dla varchar(max) trzeba wariację w DbContext:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Entity>().Property(x => x.MediaDesc).IsUnicode(false); 
} 
+0

Are jesteś pewien, że 'int.MaxInt' działa dla atrybutu' StringLength'? Próbowałem tego z atrybutem "MaxLength' (' [StringLength (int.MaxInt)]) i otrzymałem wyjątek, że wartość nie może być większa niż 4000. Może działa z 'StringLength', ale jeśli tak, to wszystko bardzo mylące ... – Slauma

+0

Nie mam pojęcia o MaxLength. Próbowałem z StringLength i działa zgodnie z oczekiwaniami. –

+2

Po prostu odkryłem, że problemem jest połączenie z atrybutem [[Column (TypeName = "varchar")] '. Bez tego działa również z 'MaxLength' i' StringLength'. +1 – Slauma

0

wyniki varchar (Max) w bazie danych. Jeśli masz niestandardową konwencję ustawiania ciągów MaxLength na 100, modelBuilder .Properties<string>() .Configure(c => c.IsUnicode(false).HasMaxLength(100)); musisz dołączyć atrybut MaxLength [Column(TypeName = "varchar(MAX)"), MaxLength]. Jeśli tego nie zrobisz, otrzymasz varchar (MAX) w bazie danych, ale walidacja spowoduje więcej niż 100 znaków

Powiązane problemy