3

속성을 필수 필드 작성 용으로 지정하는 방법은 있지만 DB 코드 마이그레이션에는 사용할 수 있습니까?필수 속성이지만 코드를 통해 Nullable, Entity Framework

나는 1000 개의 항목이있는 DB 테이블을 가지고있다. 최근에 필요한 DateTime 속성을 추가해야했습니다. 내가 [Required] 주석을 설정하면

[Required] 
    [Display(Name = "Birth", Order = 10)] 
    public DateTime? Birth { get; set; } 

, 코드 최초의 이주는 열 선언에 NOT NULL 추가합니다. 그러나 모든 현재 항목에는 "출생"데이터가 없습니다. NULL이됩니다.

속성보기 필드 validatain에 속성이 필요하지만 DB에 Nullable 일 수 있습니다. 어떻게 든 가능할까요?

나는 이미 "?" (nullable) 속성과 성공하지 않고 "가상".

+2

데이터를 편집하는 경우보기에서 데이터 모델을 사용하지 않아야합니다. 뷰 모델을 사용해야하며'DateTime'은'[Required]'로 꾸밀 수 있지만 데이터 모델에서는 생략 할 수 있습니다. –

답변

6

DB/엔티티 통신을 위해 모델을 사용하십시오.

UI 레이어에보기 모델을 사용하십시오. 표시 ViewModel의 속성에 필요하며 모델에 Nullable을 표시합니다. 필요에 따라 코드에서 캐스트를 수행하십시오. 모든 UI 관련 속성 장식 (예 : 표시, 유효성 검사 등)을 ViewModel로 이동합니다.

캐스팅은 NuGet 패키지 관리자를 통해 AutoMapper 플러그인 available으로 자동 수행 될 수 있습니다.

1

DB 컨텍스트의 OnModelCreating() 메서드를 빠르게 재정의하는 방법이 있습니다.

이 방법 :

public class AppContext : DbContext 
{ 
    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     // ... 
     modelBuilder.Entity<YourModelEntity>.Property(p => p.Birth).IsOptional(); 
    } 

} 

또는 다른 적절한 방법은 당신이 당신의 모델에 대한 일반적인 EntityTypeConfiguration 유형의 확장 클래스를 만든 다음 OnModelCreating에서 DBModelBuilder() 메소드이이 특정 구성을 추가 할 수 있다는 것입니다 방법 :

public class YourModelTypeConfiguration : EntityTypeConfiguration<YourModelType> 
{ 
    public YourModelTypeConfiguration() 
    { 
     // ... some other configurations ; 

     Property(p => p.Birth).IsOptional(); 
    } 
} 

참고가

using System.Data.Entity.ModelConfiguration; 
필요 클래스 파일 상단에3210

.

그런 다음 OnModelCreating() 메소드에이를 추가해야합니다 :

public class AppContext : DbContext 
{ 
    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     // quick and dirty solution 
     // modelBuilder.Entity<YourModelEntity>.Property(p => p.Birth).IsOptional() 

     // cleaner solution 
     modelBuilder.Configurations.Add(new YourModelTypeConfiguration()); 
    } 

} 

이 방법은 당신이 당신의 특정 구성이 분리 유지하고 모든 것을 함께 혼합하지 않습니다.

코드 첫 번째 마이그레이션을 적용 할 때 "출생"데이터베이스 필드는 null 가능해야합니다.

이 정보가 도움이되기를 바랍니다.