Entity Framework 7 모델 작성기의 소수 정밀도 설정

entity-framework-core

문제

나는 운이없는 EF7 (베타 4)에 대한 십진 정밀도를 설정하는 방법을 알아 내려고 노력해 왔습니다.

나는 다음과 같이 할 것을 기대하고 있었다.

modelBuilder.Entity<SomeClass>().Property(p => p.DecimalProperty).Precision(10, 6)

이것은 사용 가능한 것으로 보이지 않지만 GitHub의 저장소에서 다음 클래스를 찾을 수있었습니다.

https://github.com/aspnet/EntityFramework/blob/7.0.0-beta4/src/EntityFramework.Relational/RelationalDecimalTypeMapping.cs

RelationalTypeMapping 클래스 또는 메서드 시그니처를 함께 사용하는 예제는 없습니다. 어쩌면 이것은 정보 검색을위한 매핑 API의 일부로 사용되었을 것입니까?

내가 기대할 수있는 또 다른 곳은 다음과 같습니다.

modelBuilder.Entity<SomeClass>().Property(p => p.DecimalProperty).Precision(10, 6)

또는

modelBuilder.Entity<SomeClass>().Property(p => p.DecimalProperty).Precision(10, 6)

이것들은 단지 문자열을 취하는데,이 기능은 아직 구현되지 않았습니까? 아니면 정확한 위치를 찾고 있지 않습니까?

편집 : 그냥 문자열을 .ColumnType ( "10 진수 (10,6)") 솔루션을 추가로 빌드 될 때까지, 여전히 약간의 명확한 점점 마음에 줄 알았는데 아마도이 문자열을 사용하지 않으려는 것으로 알고 있습니다.

편집 : bricelam에서 명확한 후 문자열을 사용하지 않도록 지금 사용하려면 다음 확장명을 만드는 결국, 그리고 그들의 접근 방식의 단순 감사 :

modelBuilder.Entity<SomeClass>().Property(p => p.DecimalProperty).Precision(10, 6)

사용 예 :

modelBuilder.Entity<SomeClass>().Property(p => p.DecimalProperty).Precision(10, 6)

편집 : RC1 수정하기

나는 아직 이것을 테스트하지는 못했지만, RC1을 사용했을 때 다음과 같은 2 개의 샘플을 함께 던졌습니다.

modelBuilder.Entity<SomeClass>().Property(p => p.DecimalProperty).Precision(10, 6)

나는 아직 이것을 시도하지 않았기 때문에 "HasColumnType"또는 "ForSqlServerHasColumnType"사이에 올바른 사용법이 무엇인지 알지 못하지만 잘하면 이것이 올바른 방향을 가리킬 것입니다.

수락 된 답변

해결 방법은 의도 한 디자인입니다. "패싯 (facet)"을 가지고있는 대신 정밀도, 크기, 최대 길이, 유니 코드 / ansi, 고정 길이 / 가변 길이 등과 같은 유형을 설정할 수 있습니다. 기본 유형 매핑이 무엇이 아닌지 원하는 유형을 알려주십시오. 이 결정으로 돌아가서 "패싯"을 다시 도입하는 이야기가있었습니다. 당신이 그것에 대해 강하게 생각한다면, 나는 당신에게 새로운 문제만들 것을 권할 것입니다.

또한 유형 매핑에 다른 버그가 많이 있지만, beta5를 릴리스 할 때까지 수정해야합니다.


인기 답변

표시된 예는 EF RC1에 따라 구식 인 것 같습니다.

10 진수 필드에 정밀도를 설정하는 방법은 다음과 같습니다.

내가 엔티티가 있다고 가정 해 보겠습니다.

public class Review
{
    public int ReviewId { get; set; }
    public decimal TotalScore { get; set; } //I want a precision field in DB
    public DateTime CreatedOn { get; set; }
    [Timestamp]
    public byte[] RowVersion { get; set; }
}

그런 다음 내 컨텍스트 클래스에서 모델을 만들 때 매핑을 인스턴스화합니다 (매핑을 할 수는 있지만 별도로 유지하려고합니다)

public class Review
{
    public int ReviewId { get; set; }
    public decimal TotalScore { get; set; } //I want a precision field in DB
    public DateTime CreatedOn { get; set; }
    [Timestamp]
    public byte[] RowVersion { get; set; }
}

그 다음 매핑. 모델 확장이있는 네임 스페이스를 사용해야합니다.

public class Review
{
    public int ReviewId { get; set; }
    public decimal TotalScore { get; set; } //I want a precision field in DB
    public DateTime CreatedOn { get; set; }
    [Timestamp]
    public byte[] RowVersion { get; set; }
}



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