EF 7은 DateTime 열의 초기 기본값을 설정합니다.

c# entity-framework-core

문제

DateTime 열의 초기 값을 설정할 수 있어야합니다.

"getutcdate () 또는 DateTime.UtcNow

entity.Property(e => e.ShipDate).DefaultValue("getutcdate()")
entity.Property(e => e.ShipDate).DefaultValue(DateTime.UtcNow)

그런 다음 dnx . ef migration add InitialMigration 를 실행 dnx . ef migration add InitialMigration EF는 다음을 사용하여 마이그레이션 스냅 샷을 생성합니다.

entity.Property(e => e.ShipDate).DefaultValue("getutcdate()")
entity.Property(e => e.ShipDate).DefaultValue(DateTime.UtcNow)

DateTime.UtcNow를 사용할 때 ...

entity.Property(e => e.ShipDate).DefaultValue("getutcdate()")
entity.Property(e => e.ShipDate).DefaultValue(DateTime.UtcNow)

초기 마이그레이션 :

entity.Property(e => e.ShipDate).DefaultValue("getutcdate()")
entity.Property(e => e.ShipDate).DefaultValue(DateTime.UtcNow)

DateTime.UtcNow를 사용할 때 ...

entity.Property(e => e.ShipDate).DefaultValue("getutcdate()")
entity.Property(e => e.ShipDate).DefaultValue(DateTime.UtcNow)

작동해야하는 것처럼 보일 수 있지만 테이블에 데이터를 삽입 할 때 열의 기본값은 타임 스탬프가 작성된 '인스턴트'입니다.

내가 놓친 게 있니?

또한 같은 맥락에서 EF7에 IDENTITY SEED를 지정하는 방법은 무엇입니까?

감사

업데이트 sql 스크립트를 생성 한 후 두 옵션을 사용하여 얻은 결과는 다음과 같습니다.

"getutcdate ()"를 사용하는 경우 :

entity.Property(e => e.ShipDate).DefaultValue("getutcdate()")
entity.Property(e => e.ShipDate).DefaultValue(DateTime.UtcNow)

따옴표 때문에 작동하지 않는

또는 DateTime.utcNow를 사용하는 경우 :

entity.Property(e => e.ShipDate).DefaultValue("getutcdate()")
entity.Property(e => e.ShipDate).DefaultValue(DateTime.UtcNow)

내가 얻고 있던 정적 인 가치를 설명 해준다.

나는 이것으로 관리 할 수 ​​있다고 생각합니다. 이것은 버그입니까, 아니면 올바른 방법입니까? 감사

수락 된 답변

상수 값이 아닌 기본값 인 SQL을 설정하려고합니다.

entity.Property(e => e.ShipDate).HasDefaultValueSql("getutcdate()");

인기 답변

EF 코어에 대한 속성을 사용하는보다 유연한 솔루션 :

귀하의 DbContext :

protected override void OnModelCreating(ModelBuilder builder)
{
    base.OnModelCreating(builder);
    // Add your customizations after calling base.OnModelCreating(builder);
    CustomDataTypeAttributeConvention.Apply(builder);
    DecimalPrecisionAttributeConvention.Apply(builder);
    SqlDefaultValueAttributeConvention.Apply(builder);
}

다음 클래스를 생성하십시오.

protected override void OnModelCreating(ModelBuilder builder)
{
    base.OnModelCreating(builder);
    // Add your customizations after calling base.OnModelCreating(builder);
    CustomDataTypeAttributeConvention.Apply(builder);
    DecimalPrecisionAttributeConvention.Apply(builder);
    SqlDefaultValueAttributeConvention.Apply(builder);
}

및 사용자 지정 특성 :

protected override void OnModelCreating(ModelBuilder builder)
{
    base.OnModelCreating(builder);
    // Add your customizations after calling base.OnModelCreating(builder);
    CustomDataTypeAttributeConvention.Apply(builder);
    DecimalPrecisionAttributeConvention.Apply(builder);
    SqlDefaultValueAttributeConvention.Apply(builder);
}

그런 다음이 속성 중 하나를 사용하여 테이블 속성을 꾸미거나 자신 만의 속성을 만들 수 있습니다.

[DecimalPrecision(18, 9)] [SqlDefaultValue("getutcdate()")] [DataType("decimal(18,9)")]




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