2

EF 4.x 데이터베이스 우선 접근 방식을 사용하고있었습니다. 나는 edmx 파일을 가지고 있으며, EntityObject에서 파생 된 C# 클래스를 생성했습니다. 생성 된 클래스를 모델로 사용하는 ASP.NET MVC 4 응용 프로그램이 있습니다. 필수 입력란의 유효성을 검사하는 클라이언트 유효성 검사가 정상적으로 작동했습니다.Entity Framework 5.x 데이터 주석

이제 EF 5로 이동하고 DbContext 생성기를 사용하여 POCO C# 클래스를 생성합니다. 필요한 필드 유효성 검사가 더 이상 EF 5에서 작동하지 않는다는 것을 알았습니다.

문제는 EF 4.x EntityObject 생성기에서 생성 된 클래스에 [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)] 특성이 있다고 생각합니다. 그러나 EF 5.x POCO 클래스에서는 데이터 주석 특성이 생성되지 않습니다. 따라서 필요한 필드 정보가 손실됩니다.

그래서 제 질문은 다음과 같습니다

  1. 왜 EF 5.x를의 DbContext 생성기는 edmx 파일에서 [Required] 주석을 생성하지 않는 이유는 무엇입니까?
  2. 에 올바른 데이터 주석을 넣을 수있는 위치는 어디입니까? .tt 파일을 수정하여 [필수] 속성 을 생성합니까? 또는 수동으로 [MetadataType] 부분 클래스를 작성하고 별도의 클래스에 데이터 주석 속성을 정의 하시겠습니까?

답변

0

1) 이유를 모르겠습니다. Db 우선 접근법이 특성에 데이터 주석을 추가하지 않는다는 것을 알고 있습니다.

2) 사실은 별도의 부분 클래스를 만듭니다! Here이 그 예입니다. 모델을 업데이트 할 때마다 EF가 모든 POCO 클래스를 덮어 쓰고 다시 생성하기 때문에 해당 클래스에 대한 모든 변경 (데이터 주석도)이 손실됩니다 ...

+0

도움이 될 수 있습니다. 그러나 나는 결국 [Required] 속성을 추가하기 위해 model.tt 파일을 변경한다. – Hengyi

0

아마도이 링크가 유용 할 것입니다. EF Validation 간단하게 요구되는 검증과 메타 데이터 클래스를 추가 :

[MetadataType(typeof(UserMetadata)) 
public partial class User 
{ 
    ... 
} 
public class UserMetadata 
{ 
    [UserValidate("State")] 
    public string State; 
    // etc. 
} 

희망이 내가 템플릿이 MetadataType 클래스를 생성 할 수 있습니다 http://t4metadatatemplate.codeplex.com/ 발견

관련 문제