2010-12-27 3 views
1

ORM에 EFv4를 사용하고 있으며 nullable이 아닌 기본값으로 빈 문자열로 표시된 여러 열이있는 테이블에 레코드를 삽입하려고했습니다 (nvarchar 유형의 경우). 열). 문제는 EF가이 열의 기본값을 선택하지 않고 Entity의 인스턴스를 만들었지 만 일부 문자열 속성을 남겨 두었을 때 null DB 테이블에 저장하려고하면 예외가 발생한다는 것입니다. 데이터 세트).엔티티 프레임 워크가 SQL Server DB Nullableable 열에 대해 생성합니다.

빈 문자열의 기본값은 SQL Server Management Studio에서 작동하지만 (열 emtpy를두면 emtpy 문자열이 자동으로 삽입됩니다) EF 내에서 작동하지 않습니다.

나는 실제로 이것을 uniqueidentifier 기본 키 열로 알아 차렸지만 열의 기본값에 상관없이 열의 기본값에 대한 정보가 없으므로 열이 무엇이든 상관없이 EF 모델에 표시됩니다.

다른 사람이 알아 차 렸습니까? 어떤 해결 방법?

아는 사람이라면 최신 EF 기능 CTP에서 개선 된 점이 있습니까?

답변

3

이 문제는 EF 문제로 보지 않습니다. L2S도 마찬가지입니다. '문제'는 테이블에 행을 삽입 할 때 EF/L2S가 실제로 Insert 문에 열을 NULL 값과 함께 포함한다는 것입니다. 이와 같이 삽입이 수행되면 기본값이 사용되지 않습니다.

DAL에서 수행 한 작업을 수행해야 할 수도 있습니다. 삽입을 수행하기 전에 null을 기본값으로 바꿀 수 있습니다.

+0

나는이 그래 그것을 할 수있을 것 같아요. DB에서 null을 허용하는 것으로 다시 전환하는 것이 합리적입니까? 내가 그것을 보았을 때, 엔티티의 모든 값을 초기화해야하는 것은 상당히 고통 스럽습니다. 몇몇 엔티티는 수십 개의 문자열 필드를 가지고 있습니다. – mare

+0

@Mare - 나는 아닙니다. 하지만 그 이유는 대부분 DB의 null 허용 열을 가능한 많이 피하려고하기 때문입니다. 엔티티의 각 속성을 검사하는 효율적인 루틴을 작성할 수 있어야하며 데이터 유형이 string 인 경우 null을 String.Empty로 바꿉니다. 나는 우리가 이것을한다고 생각한다. –

0

Management Studio에서 내 테이블을 만들 때 할당 한 기본값은 "데이터베이스에서 모델 만들기"를 수행 할 때 EF 모델로 만들지 않지만 SQL 서버를 생성 한 다음 EF 모델에서 기본값을 설정하면 개체를 만들 때 개체에 설정된 기본값이 사용됩니다.

편집 : 문자열의이 같은 직접 EDMX 파일을 편집해야합니다

<Property Type="String" Name="Listing" MaxLength="Max" FixedLength="false" Unicode="false" DefaultValue="" /> 
관련 문제