2012-10-12 3 views
10

[Required] 특성을 Entity Framework의 복합 유형에 정의하려고합니다. 예를 들어 AddressCustomer 엔티티가 있습니다. Address 엔티티에는 필수 PostCode 속성이 있습니다.선택적 Entity Framework 복합 형식에 대한 필수 속성

[ComplexType] 
public class Address { 
    public string Address1 { get; set; } 
    [Required] 
    public string PostCode { get; set; } 
} 

public class Customer { 
    public int CustomerId {get;set;} 
    public Address Address {get;set;} 
} 

내가 별도의 엔티티로 내 복잡한 유형을 저장하지 않으 (I 실제로 주소를 사용하지 않는, 문제의이 단지 쉬운 그림). 나는 빈 주소 엔티티를 제공하는 경우

Null value for non-nullable member. Member: 'Address'.

유효성 검사 때문에 필수 속성의 우편 번호 필드에 실패 :이 오류를 제공하기 때문에 나는 Customer.Address 널을 떠날 수 없다.

이것을 달성 할 방법이 있습니까? 나는 EF5/NET4.5를 사용하고있다.

답변

8

복잡한 유형에서는 불가능합니다. 주소 엔터티를 null로 만들려면 해당 주소 엔터티를 만들어야합니다.

EF가 복잡한 유형과 함께 수행하는 작업은 동일한 테이블에 속성을 매핑하는 것입니다. 의도 한 것처럼 들릴 수 있습니다. 그 때문에의

- 귀하의 예를 들어 스키마는 다음과 같을 것이다 : 그것은 데이터베이스에서 유효하지 이후, Address_PostCode에 대한 nullable이 아닌 열이

enter image description here

을 EF가 할 수있는 방법이 아니다 주소가있는 개체와 우편 번호가없는 행을 만듭니다.

+0

정말로 다른 엔티티가 없으면이를 수행하기를 바랬습니다. 약간 다른 방법으로 유효성 검사를해야 할 것 같네요. 어쨌든 내 의혹을 확인해 주셔서 감사합니다! – Richard

+0

이것은 EF의 정말 나쁜 특징입니다. Address 개체에 리플렉션을 사용하면 EF는 테이블 생성시 생성 할 열을 쉽게 만들 수 있습니다. 엔티티의 Address 인스턴스를 가질 필요가 없습니다. 엔티티 생성/업데이트에서 ComplexType 속성이 null 인 경우 데이터베이스의 해당 열을 null로 설정하는 것이 무엇이니까? 이것은 EF IMO의 다음 버전에 추가 할 수있는 쉬운 기능입니다. – Ibraheem

관련 문제