Entity Framework EF 코드가있는 ASP.NET MVC의 StringLength 및 MaxLength 특성


152

동작 [MaxLength][StringLength]속성 의 차이점은 무엇입니까 ?

내가 알 [MaxLength]수있는 한 (배열의 최대 길이를 확인할 수 있는 예외는 있지만) 이것들은 동일하고 다소 중복됩니까?


1
나는 ASP.NET MVC에 대해 확실하지 않다하지만 EF에 대한 차이점이 없습니다 : stackoverflow.com/questions/5414611/...
라디 Mrnka

1
stringLength는 변경시 마이그레이션 col 크기에 영향을 미치지 않습니다.
카스 Bloem

@CasBloem StringLength는 실제로 EntityFramework에 의해 선택되어 열 길이에 영향을 미치며 (버전 6 이상)
jakejgordon

답변:


203

맥스 길이 는 Entity Framework에서 데이터베이스를 만들 때 문자열 값 필드를 얼마나 크게 만들지 결정하는 데 사용됩니다.

MSDN에서 :

속성에 허용되는 배열 또는 문자열 데이터의 최대 길이를 지정합니다.

끈 길이 는 사용자 입력의 유효성을 검사하는 데 사용되는 데이터 주석입니다.

MSDN에서 :

데이터 필드에 허용되는 최소 및 최대 문자 길이를 지정합니다.


10
또한 기본적으로 MVC 3은 인식되지 않지만 MaxLengthAttributeEF는 인식합니다StringLengthAttribute
marcind

15
따라서 EF에서 StringLength를 사용할 수 있고 문자열 필드 크기를 유추하기 때문에 MaxLength가 실제로 필요하지 않습니다. 그렇다면 왜 MaxLength를 만들었습니까?
Matt Johnson-Pint

4
@MattJohnson-StringLength는 문자열 데이터를 암시하지만 MaxLength는 이진 데이터에도 적용 할 수 있기 때문에 새로운 MaxLength 속성을 만드는 결정은 의미에 대한 것임을 상기합니다. 그러나 지옥이 불편한 것은 확실합니다.
Josh

1
@MartinSmith-방금 StringLength를 사용해 보았고 저에게 효과가 있었고 EF6 RC1을 사용하고 있으므로 의견이 정확하지 않다고 생각합니다
Colin

5
[MaxLength]그렇다면 왜 ErrorMessage가 있습니까?
Zapnologica

46

방금 다른 게시물에서 배웠지 만 매우 유용한 추가 정보가 있지만 설명서를 찾을 수없는 것 같습니다 (누군가 MSDN에서 링크를 공유 할 수 있다면 놀라 울 것입니다).

이러한 속성과 관련된 유효성 검사 메시지는 실제로 속성과 관련된 자리 표시자를 대체합니다. 예를 들면 다음과 같습니다.

[MaxLength(100, "{0} can have a max of {1} characters")]
public string Address { get; set; }

글자 수 한도를 초과하면 다음을 출력합니다 : "주소는 최대 100 자까지 가능합니다"

내가 알고있는 자리 표시자는 다음과 같습니다.

  • {0} = 속성 이름
  • {1} = 최대 길이
  • {2} = 최소 길이

처음에 이것을 지적한 bloudraak 에게 감사드립니다 .


12

[MaxLength][StringLength]속성을 모두 사용했을 때의 결과는 다음과 같습니다 EF code first. 둘 다 사용 [MaxLength]하면 레이스 에서 승리합니다. studentname아래 클래스의 열에 있는 테스트 결과 참조

 public class Student
 {
    public Student () {}

    [Key]
    [Column(Order=1)]
    public int StudentKey { get; set; }

    //[MaxLength(50),StringLength(60)]    //studentname column will be nvarchar(50)
    //[StringLength(60)]    //studentname column will be nvarchar(60)
    [MaxLength(50)] //studentname column will be nvarchar(50)
    public string StudentName { get; set; }

    [Timestamp]
    public byte[] RowVersion { get; set; }
 }

7

모든 좋은 답변 ... 유효성 측면에서 MaxLength는 서버 측에서만 검증되고 StringLength는 클라이언트 측에서도 검증됩니다.




1

내 컨텍스트에 아래 줄을 추가하여 해결했습니다.

modelBuilder.Entity<YourObject>().Property(e => e.YourColumn).HasMaxLength(4000);

어떻게 든 [MaxLength]나를 위해 일 하지 않았다.


0

웹 페이지의 양식에서 텍스트의 최대 입력 길이를 제한하기 위해 속성을 사용할 때 StringLength는 maxlength html 속성을 생성하는 것으로 보입니다 (적어도 MVC 5 테스트에서는). 그런 다음 선택할 텍스트 길이가 최대 텍스트 길이임을 사용자에게 알리는 방법을 결정합니다. stringlength 속성을 사용하면 사용자는 허용 된 길이를 초과하여 입력 할 수 없습니다. maxlength 속성은이 html 속성을 추가하지 않고 대신 데이터 유효성 검사 속성을 생성합니다. 즉, 사용자는 표시된 길이를 초과하여 입력 할 수 있으며 다음 필드로 이동하거나 제출을 클릭 할 때 자바 스크립트의 유효성 검사에 따라 입력 시간이 길어지지 않습니다. 자바 스크립트가 비활성화 된 경우 서버 측 유효성 검사). 이 경우 사용자에게 오류 메시지로 제한 사항을 알릴 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.