2011-10-18 2 views
3

Entity Framework를 사용하여 웹 사이트의 내용을 데이터베이스에 저장하려고합니다. 그러나 HTML> 4000의 길이가되면 다음 유효성 검사 오류가 발생합니다.Entity Framework를 사용하여 SQL 데이터베이스에 긴 문자열 저장

A first chance exception of type 'System.Data.Entity.Validation.DbEntityValidationException' occurred in EntityFramework.DLL WebDev.WebServer40.exe Information: 0 : Property: RawData Error: The field RawData must be a string or array type with a maximum length of '4000'.

이 문제를 해결하는 방법에 대해 알고 싶습니다. RawData는 NVARCHAR (4000)로 생성되지만 더 좋은 유형은 TEXT입니다. 어떻게 든 강제 할 수 있습니까?

감사합니다.

+0

RawData 속성은 어떤 종류의 데이터 형식입니까? 그것은 문자열이 아닌가요? – Icarus

+0

SQL CE를 사용하고 있습니까? –

+0

RawData는 C#의 문자열입니다. SQL CE (단순히 연결 문자열로 판단)를 사용하고 있습니다. –

답변

2

:

public class CustomerMap : EntityTypeConfiguration<Customer> 
{ 
    this.Property(t => t.Description).HasColumnType("text"); 
} 

그런 다음 당신은 OnModelCreating 방법에 dbContext 클래스에 매핑 파일을 등록해야 , 나는 길을 따라 리팩토링하는 자신을 구하기 위해 그것을 사용할 것이다.

http://technet.microsoft.com/en-us/library/bb510662.aspx

SQL의 CE는 NVARCHAR(MAX) 그래서 그것이 SQL Server 2008을 사용할 수있는 경우, 엔티티 프레임 워크는 당신의 문자열에서 당신을 위해 NVARCHAR(MAX) 열을 생성합니다 NVARCHAR(4000)

에 문자열을 제한 지원하지 않습니다.

+0

그러면 MAX의 값을 어떻게 올리나요? –

+0

이 대답을 명확히하려면 SQL Server 2008로 이동하십시오. CE를 사용하지 마십시오. –

+0

SQLCE (4)의 한계는 4000입니까? 나는 당신이 [MaxLegth] 주석을 사용하면 효과가 있다고 생각한다 .... 나는 그것을 직접 사용하고있어 ... –

1

TEXT 유형이 더 좋은 옵션입니다. 그러나 이것은 제한된 nvarchar에 비해 메모리가 부족합니다.

또는 BLOB을 사용할 수 있지만 일부 문자열 데이터 처리가 필요합니다.

+0

이 표에는 많은 수의 행이 없으므로 TEXT를 사용해야합니까? BLOB가 더 많은 메모리를 효율적으로 사용합니까? –

+0

TEXT는 문자열로 값을 넣을 때 처리가 더 쉽습니다. BLOB를 사용하는 경우 저장시 바이너리로 변환 한 다음 읽을 때 문자열로 변환해야합니다. – Jonats

0

EF 코드를 처음 사용 하시겠습니까? 엔티티 매핑 파일에서 텍스트 유형을 지정할 수 있습니다.

예 매핑 파일 다음 TEXT 데이터 유형이 NVARCHAR(MAX) 찬성에서 사용되지

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Configurations.Add(new CustomerMap()); 
    base.OnModelCreating(modelBuilder); 
} 
+0

매핑 파일은 어디로 이동합니까? 나는 '이것'이 무엇인지 파악하려고 애 쓰고 있습니다. –

6

SQL CE 4.0을 사용하고 있으며 매우 동일한 문제가 있습니다. 나는 다음과 같은 DataAnnotation을 (내가 주석을 좋아 :))

public class Page 
    { 
     [Key] 
     public int PageId { get; set; } 

     [MaxLength] 
     public string Content { get; set; } 
    } 

지금은 Content 속성에 어떤 콘텐츠를 저장할 수 있습니다 사용하여 해결하기 위해 관리!

관련 문제