2016-11-03 2 views
1

나는 새로운 행이 삽입 될 때마다 현재의 날짜에 CreatedDate 열을 설정하려면, 그래서 이런 식으로했다 :EF : 생성 된 날짜 속성에 기본값을 사용해도됩니까?

public DateTime CreateDate { get; set; } = DateTime.Now; 

나는 그것을 테스트하고이 실용적인 접근 방식인가, 잘 작동? 많은 기사가 너무 많은 코드로 유창한 API를 사용하여 동일한 것을 얻는 것을 보았습니다. 아무도이 간단한 방법을 언급하지 않았습니다.

+3

한 가지 문제는 응용 프로그램 서버가 실행되고있는 위치에 따라이 시간이 생성된다는 것입니다. 사용자 상호 작용이 있고 사용자가있는 시간대를 반영하려는 경우 작동하지 않습니다. 그러나 귀하의 응용 프로그램을 알지 못하면 이것은 당신에게 문제가되지 않을 수 있습니다. –

답변

3

원하는 목표에 따라 다릅니다.

나는 많은 기사가

그 기사의 대부분은 데이터베이스 수준에서 기본 값을 추가하는 방법에 대한 것, 너무 많은 코드를 사용하여 유창하게 API와 같은을 달성했다. 너는 그렇게하지 않는다. 일반 SQL을 사용하여 테이블에 행을 삽입하고 CreatedDate의 값을 지정하지 않으면 오류가 발생합니다.

무엇을 하시겠습니까? 삽입 할 때 항상 CreatedDate을 SQL에 지정해야합니다. 그러나 Entity Framework 은 삽입 할 때 항상을 SQL에 지정하고 데이터베이스 수준에서 설정된 기본값을 완전히 무시합니다.

그렇다면 원하는대로 - 기본값은 C#을 통해 개체를 만들 때 적용됩니다. 그런 다음 현재 수행중인 작업은 완전히 정상입니다. 또한 클래스의 생성자 내부에서 값을 설정하는 것으로 작성할 수도 있습니다.

@Alex Kozlowski는 좋은 의견을 제기합니다. 즉, DateTime.Now은 삽입하려는 값이 아닐 수도 있습니다. 코드를 실행하는 시스템에 따라 다릅니다. 시간대가 서버의 시간대와 다를 수도 있고 시계가 동기화되지 않을 수도 있습니다.

+0

그리고이 "서버 시간 충돌"문제를 어떻게 피할 수 있습니까? –

+1

@MohamedAhmed 모든 시간을 UTC로 저장하여 다른 표준 시간대를 피할 수 있지만 시계가 꺼져있는 것은 한 대의 전용 서버 (일반적으로 데이터베이스 서버)가 시간을 검색하도록하는 것 이외에는 확실히 방지 할 수없는 것입니다. 그리고 EF로 게임을 멋지게 만들려면 피할 수있게 관리하고있는 데이터베이스 수준의 기본값으로 정확하게 가야합니다. – hvd

1

예. 이 기능은 C# 버전 6 이상에 추가되었습니다. 이것은 C# -6 이후 버전에서만 작동합니다. 그리고 그것이 많은 기사에서 찾을 수없는 이유입니다.

관련 문제