2009-06-30 5 views
1

O/R 매핑을위한 Entity Framework 및 프로젝트의 유효성 검사를위한 DataAnnotations를 사용하기로 결정했으며이를 구현하려고 할 때 이상한 문제가 발생했습니다. DataAnnotations를 사용하여 복합 유형 유효성 검사

내가 무슨 짓을했는지 있습니다 :

을 내가 가지고있는 다음과 같은 개체 유형은 다음과 같이 NameAddress 정의 복잡한 종류

Contact 
******* 
Int32 Id (not null, Entity Key) 
Name Name (not null) 
Address Address (not null) 
String Phone 
String Email 

:

Name         Address 
****         ******* 
String First (not null)    String Street (not null) 
String Last (not null)    String ZipCode (not null) 
             String City (not null) 

을 다음과 같은 클래스는 내 개체와 동일한 네임 스페이스에 있습니다.

나는 새로운 Contact 항목을 만들 때 모든 값 null을 어디에3210
public class ContactMetadata 
{ 
    [Required] 
    public Name Name { get; set; } 
} 

[MetadataType(typeof(ContactMetadata))] 
partial class Contact { } 

그러나 NameAddress 유형 대신 NameAddressnull 자신을 가치있는의, NameAddress의 인스턴스로 채워져있다. 따라서 모든 값이 null이더라도 Required 특성은 오류를 발생시키지 않습니다. 이 문제를 어떻게 해결할 수 있습니까?

답변

1

그래서 누가 속성이 null 인 Name 및 Address 객체의 인스턴스를 생성합니까? 흥미 롭 군.

어린이에게 [필수] 속성을 추가 할 수 있습니까?

편집 :이 일을 냄새 나는 방법으로 생각할 수도 있지만, 명확하게하기 위해 게시물에 대한 답을 편집하여 다음 사람이이 문제에 쉽게 답변 할 수 있도록합니다.

null 값에 대해 검증하는 사용자 정의 유효성 검사 속성을 쓰기 :

솔루션을 제안 (그리고 가능하지만, 아직 검증되지 않은).

+0

정확히.위와 같은 구조를 사용하여 NameMetadata라는 새로운 클래스를 만들고 이름과 성을 모두 설정했지만 차이는 없습니다. –

+0

지금이 질문에 현상금이 있습니다 - 그리고 당신은 가장 가까운 곳입니다 ...;) –

+0

아, 얼마나 슬픈 일인지 모르겠습니다. 어쩌면 사용자 지정 특성을 만들고 거기에 null 값에 대해 유효성을 검사 해 보셨습니까? – blu

1

HTML 필드에서 끝나는 이름이 클래스의 속성 이름과 일치하는지 확인하십시오. 예를 들어

,이 경우 다음 HTML 헬퍼에

public class Contact { 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public Address Address { get; set; } 
} 

public class Address { 
    public string Street { get; set; } 
    public string City { get; set; } 
    [...] 
} 

통화는 다음과 같아야합니다

<%= Html.TextBox("FirstName") %> 
<%= Html.TextBox("LastName") %> 
<%= Html.TextBox("Address.Street") %> 
<%= Html.TextBox("Address.City") %> 
[...] 
+0

나는 아직 볼 부분을 보지 못했다. 그러나 나는 그렇게 할 것이다. 감사! –

+0

고마워, 이것으로 나에게 비슷한 것을 도왔다! – JustinP8

0

체크 아웃이 블로그 게시물 complex-dataannotations-validation을. RequiredAssociation 특성이 필요한 것입니다. LINQ to SQL 대신 Entity Framework를 약간 조정해야 할 수도 있습니다.

0

나는 지금 같은 문제로 고심하고있다. 나는 그것을하기위한 반은 우아한 방법은 속성으로 핵심 원시 타입을 참조하고 그것에 데이터 주석을 넣는 것이라고 생각한다. AddressID가 키 필드 인 예제가 있습니다.

public class Contact{ 

[Required] 
public int? AddressIDForValidation{ 
get{return this.Address.AdressID;} 
} 

public Address Address{get;set;} 
} 



public class Address{ 
public int? AddressID{get;set;} 
public string Street{get;set;} 
} 
관련 문제