2013-10-30 3 views
3

C# 클래스에는 SQL Server 데이터베이스의 열에 매핑하기 위해 코드 우선을 사용하는 날짜/시간 속성이 있습니다. 이 날짜는 절대로 기본 날짜 또는 날짜 (DateTime)보다 작거나 근접하지 않습니다. System.DateTime이라는 속성을 입력하면 MyProp == default(DateTime)으로 설정되지 않은 값을 항상 확인할 수 있습니다.Nullable DateTime 대 기본 (DateTime)에 의존

(null이 허용되지 않음) DateTime 대신 nullable DateTime?으로이 속성을 입력 할 것인지 여부를 묻는 설득력있는 이유가 있습니까? 왜?

+0

경우에 따라 Nullable을 사용할 수있는 옵션이 없습니다. 예를 들어, 직렬화 문제 일 수 있습니다. 모든 DateTime? 인스턴스를'DateTime' (null => MinValue)로 변환하고 비 직렬화시 null로 변환하는 경향이 있습니다 ... –

+2

관습에 따라 완전히 다른 것을 의미하는 *** 잘못된 *** 값을 저장 중입니다. *는 현재 관리 할 수있는 유지 관리 위험이지만 6 개월 내에 (또는 코드를 유지해야하는 낯선 사람) 당신을 물을 수 있습니다. 한편, 'null'은 모호하지 않습니다. – spender

+0

@spender 좋은 지적. – HappyNomad

답변

1

내 생각에 정수와 같은 일부 유형의 센티널 값은 레코드 ID와 관련이 있습니다. 0이 합법적 인 값일 때 (값이 음수 일 수 있음) 의미가 약합니다. 날짜는 항상 의미가 있으므로 null은 "우리가하지 않을 때"값으로 더 유익합니다. 또한 나는 그것이 "우리에게 날짜가없는 모든 레코드를 제공합니다"라는 쿼리를 훨씬 더 깨끗하게 보일 것이라고 생각합니다.

+0

'default (DateTime)'값은 일반적인 의미에서 합법적이지만,보다 구체적인 경우 (예 : 광산)에는 너무 이르다. 그것과 쿼리를보다 깨끗하게 보이게하는 것은 좋은 일이지만 그럴만 한 이유는 아닙니다. 나는 추가적인 이유가 있는지, 그리고/또는 연주와 같은 더 실제적 인 것이 있는지 궁금합니다. – HappyNomad