0

프로젝트에서 EF 4.1 "데이터베이스를 먼저 사용 중"입니다. T4 템플릿을 사용하여 생성 된 속성을 Required, DisplayName, MaxLength와 같은 속성으로 조건부로 꾸미고 있습니다. 내 T4 템플릿에서 WriteProperty 방법 안에, 내가 좋아하는 뭔가가 있습니다EF T4 템플릿 - 조건부로 방출되는 맞춤 속성

var maxLength = edmProperty.TypeUsage.Facets.Where(f => f.Name == "MaxLength").FirstOrDefault(); 
if (maxLength != null && maxLength.Value.ToString() != "Max") 
{#> 
    [MaxLength(<#= maxLength.Value #>, ErrorMessage = "<#=edmProperty.Documentation != null ? edmProperty.Documentation.LongDescription : edmProperty.Name #> cannot exceed <#=maxLength.Value #> characters.")] 
<#+} 

이것은 edmx에서 유추 할 수있는 정보 위대한 작품을하지만, 사용자 정의 간단하게 사용할 수없는 몇 가지가있다. 예를 들어

, 나는 사용자 정의 정규 표현식-type 속성을 가진 EmailAddress 속성을 장식한다고 가정합니다. 내 모델의 전자 메일 주소 필드를 자동으로 "제거"하고 속성 이름을 확인하지 않고이 특성을 적용하려면 어떻게합니까?

는 IsEmailAddress 같은 EdmProperty 아마도 및 사용자 정의 속성을 추가 "확장"하는이 방법이 있습니까?

감사합니다.

답변

0

아니요, 아무 것도 없습니다. EF 모델 디자이너는 유효성 검사를 위해 사용자 지정 메타 데이터로 모델을 확장하는 데 여전히 아무 것도 없습니다. 당신은 물론 명명 규칙을 시도하거나 바퀴를 다시 만들고 자신의 메타 데이터 파일을 따로 추가 할 수 있습니다. 그러나 더 쉬운 방법은 부분 클래스에 대해 유효성 검사 속성과 메타 데이터 유형을 수동으로 작성하는 것입니다.

EF에서이 기능을 추가하는 것에 대해 분명히 투표 할 것입니다.

+0

사실이 아닙니다. 자세한 내용은 내 대답보기 – Pawel

1

당신이 (일종의) 그렇게 할 수 있다고 생각합니다. 나는 이것을 시도하지 않았지만 네임 스페이스의 속성을 Edmx 파일에 추가하면 메타 데이터 속성을 통해 네임 스페이스에 액세스 할 수있다. 이런 식으로 뭔가 :

<Property Name="ID" Type="Int32" Nullable="false" myNs:regex="xxx" xmlns:myNs="http://tempuri.org" /> 

그런 다음 당신이 (당신이 EdmProperty가 주어진)이 같은 값을 읽을 수 있습니다 : 여기

var metadata = edmProperty.MetadataProperties.Single(p => p.Name == "http://tempuri.org:regex"); 
Console.WriteLine(metadata.Value); 

유일한 문제는 당신이 데이터베이스 edmx에서 모델을 업데이트 할 때마다 것입니다 파일을 덮어 쓸 수 있으며 edmx 파일에 입력 한 모든 주석을 잃을 수 있습니다.