Entity Framework 7 Fluent API가 IsOptional ()을 인식하지 못함

ef-fluent-api entity-framework entity-framework-core

문제

나는 현재 엔티티 프레임 워크 7을 사용하여 Asp.Net 5 프로젝트에서 내 데이터베이스를 설정하고 있는데, 이전에 EF 6을 사용하여 컬럼의 일부를 Nullable로 만들고 싶었을 때,

modelBuilder.Entity<Article>().Property(t => t.ArticleDateModified).IsOptional();

하지만 IsOptional 이 EF7에 더 이상 포함되지 않는 것 같아요. IsOptional 사용하여 어떻게 동일한 결과를 얻을 수 있을지 궁금합니다.

편집 : 마크의 대답은 참으로 정확합니다. 처음에는 IsOptional 과 같은 것을 발견했기 때문에 작동했습니다.

modelBuilder.Entity<Article>().Property(t => t.ArticleDateModified).IsOptional();

그러나 그것 없이는 몇 가지 테스트를 실행 한 후 내 도메인 모델에서 nullable로 표시했기 때문에 데이터베이스 열을 null로 설정했습니다.

modelBuilder.Entity<Article>().Property(t => t.ArticleDateModified).IsOptional();

또한 DateTime 을 null이 아닌 값으로 만들고 IsRequired(false) 사용하면 다음과 같은 오류가 발생합니다.

엔티티 유형 'Article'의 'ArticleDateModified'속성은 속성 유형이 'DateTime'(Null 허용 유형이 아니기 때문에)을 Nullable / Optional로 표시 할 수 없습니다. 모든 속성은 nullable / required로 표시 할 수 있지만 nullable 형식의 속성과 기본 키의 일부만 nullable / optional로 표시 할 수 있습니다.

그래서, 만약 내가 데이터베이스 컬럼을 nullable로 만들어야 만한다면, IsRequired(false) 를 사용하는 것이 내 도메인 클래스에서 nullable이되도록 만드는 것이 무엇인지 궁금하다.

수락 된 답변

문서 페이지 의 참고 사항을 기반으로 선언적으로이 작업에 대한 지원이 철회 된 것으로 보입니다. 위트하려면 :

CLR 유형이 널을 포함 할 수없는 특성은 선택적으로 구성 될 수 없습니다. 이 속성은 항상 Entity Framework에서 필요하다고 간주됩니다.

이, GitHub의에서 호스팅하는 프로젝트의 설계 토론에서 볼 수있는 의도적 인 것을 구체적으로 :

즉, Nullable로 표시된 속성은 null 값을 지원하지만 null이 아닌 것으로 표시된 속성은 Null 값을 포함해서는 안됩니다. null이 허용되지 않는 null이 허용되지 않는 CLR 유형의 특성을 표시하는 것은 허용되지 않습니다. 이것은 허용되는 EF6 동작과 다릅니다. [강조 추가]


결과적으로, EF7에서 NULL 열은 nullable 매핑 속성을 엄격하게 의미합니다. 속성이 nullable 인 경우 관련 열은 IsRequired 표시하거나 구성하지 않는 한 NULL 이어야합니다.


OP 편집에 대한 응답

흥미 롭습니다. 처음에는 IsRequired(bool) API에 대한 설명서를 보지 않았습니다. 좀 유월에에 대한 논의 점을 발견 회의록 이 EF6의에 해당 될 것이라고 명시 IsOptional() :

.IsOptional () - 우리는 Required (false)를 호출하여이 기능을 제공 할 것이다.
.IsRequired () - 같은 기능으로 Required ()를 제공합니다.

이것이 원래 의도 였지만 지원 결정을 취소 한 설계 결정은 10 월부터였습니다. (업데이트 당) 비 nullable 속성에서 IsRequired(false) 를 설정하려고하면 완전히 제거되지 않고 런타임 오류가 발생합니다.

이제는 불필요하지만 유효한 코드를 해독하지 않고 API를 제거 할 수 없습니다. 별도의 IsRequired(bool)IsRequired() 정의로 구현되지 않았지만 하나의 IsRequired(bool required = true) . 그것이 제거되고 매개 변수없는 버전으로 대체되면 그것은 큰 변화가 될 것입니다.


인기 답변

Em ... 속성을 nullable로 선언 하시겠습니까?

class Article
{
    public DateTime? ArticleDateModified {get;set;}
}



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.