programing

ASP.net EF Codefirst Data Annotations를 사용하여 SQL Server에서 열을 varchar(max)로 설정하려면 어떻게 해야 합니까?

css3 2023. 7. 29. 08:47

ASP.net EF Codefirst Data Annotations를 사용하여 SQL Server에서 열을 varchar(max)로 설정하려면 어떻게 해야 합니까?

저는 엔터티 프레임워크 코드가 먼저 열을 사용하여 제 테이블을 만들 수 있는 올바른 구문을 찾으려고 웹을 검색했습니다: varchar(max).

이것이 제가 가진 것입니다.기본적으로 varchar(128)가 생성됩니다.varchar(max)는 어떻게 생성합니까?

[MaxLength]를 시도했지만 성공하지 못했습니다.

어떤 도움이라도 주시면 감사하겠습니다.감사합니다!

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

놀랍게도 가장 확실한 해결책은 효과가 있습니다.

[MaxLength]속성만 생성합니다.varchar최대 길이가 MAX가 아닌 열(내 경우 SQL Server Express 2008 R2) - 8000입니다.

이것은 당신을 얻을 것입니다.nvarchar(max):

[StringLength(int.MaxValue)]

유니코드가 아닌 것을 강제로 적용하는 속성은 없다고 생각합니다(정말로 그렇게 하시겠습니까?), 그래서varchar(max)DbContext를 수정해야 합니다.

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

[MaxLength] 주석을 사용합니다.

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

@Slauma 응답에 대한 업데이트.

에서 이와 같은 모든 문자열에 재정의 사용OnModelCreating:

modelBuilder.Properties<string>().Configure(s => 
    s.HasMaxLength(256).HasColumnType("nvarchar"));

다음과 같은 속성을 사용하여 속성을 수정합니다.

[Column(TypeName = "nvarchar(MAX)")]
public string CaseComment { get; set; }

또는 다음과 같습니다.

modelBuilder.Entity<YourClass>()
    .Property(b => b.CaseComment)
    .HasColumnType("nvarchar(MAX)");

이로 인해 예외가 발생할 수 있습니다.Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.열이 올바른 데이터 유형임에도 불구하고 Entity Framework는 여전히 열이 옳다고 생각합니다.nvarchar(256)그리고 오류를 던집니다.DbEntityValidationException.

이 문제를 해결하려면 대신 다음을 사용합니다.

[Column(TypeName = "nvarchar(MAX)")]
[MaxLength]
public string CaseComment { get; set; }

또는

modelBuilder.Entity<YourClass>()
    .Property(b => b.CaseComment)
    .HasColumnType("nvarchar(MAX)")
    .HasMaxLength(null);

[Column(TypeName = "varchar(MAX)")]결과적으로 데이터베이스에 varchar(Max)가 생성됩니다.사용자 정의 컨벤션에서 MaxLength 문자열을 100으로 설정하는 경우

modelBuilder
    .Properties<string>()
    .Configure(c => c.IsUnicode(false).HasMaxLength(100));

MaxLength 특성을 포함해야 합니다.[Column(TypeName = "varchar(MAX)"), MaxLength]그렇지 않은 경우 데이터베이스에 varchar(MAX)가 표시되지만 유효성 검사는 100자를 초과합니다.

언급URL : https://stackoverflow.com/questions/11235847/how-do-i-set-a-column-in-sql-server-to-varcharmax-using-asp-net-ef-codefirst-d