기존의 POS (Point-Of-Sale) 키오스크 애플리케이션에서 코드 우선을 사용하려고합니다. 이것은 연료 스테이션 앱이므로 소수점 세 자리 뒤에 통화를 사용해야합니다. . -의 열을 생성EF5 코드 첫 번째 마이 그 레이션 : 십진 정밀도 및 배율
CustomSqlGenerator.DropDefaultConstraint("Config", "DefaultTaxPerDollar", q => Sql(q));
AlterColumn("Config", "DefaultTaxPerDollar", c => c.Decimal(nullable: false, precision: 19, scale: 4, defaultValue: 0.087m));
합니다 (DropDefaultConstraint
호출 this bug에 대한 해결 방법은 내가 그것을 제거 시도했다 :
나는 정밀도와 스케일을 설정하기 위해 내 마이그레이션에 다음 코드를 사용하고 있습니다 나중에 마이 그 레이션하는 대신 초기 마이그레이션을 사용하지 마십시오.
그리고 열은 적절한 정밀도와 축척으로 생성됩니다. SSMS를 사용하여 값을 올바르게 입력 할 수 있습니다 (예 : 1.2345는 1.2345로 저장 됨). 그러나 값이 모델을 통해 저장되면 모든 값은 반올림되지 않고 소수점 이하 두 자리까지 잘립니다 (예 : 0.5555는 0.55가됩니다).
here 같이 나는 OnModelCreating 방법의 유창함 API를 사용하여 한 시도 우선 다음을 포함하여 modelBuilder.Conventions.Remove<DecimalPropertyConvention>()
을
- :
protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity() .Property(c => c.DefaultTaxPerDollar) .HasPrecision(19, 4); base.OnModelCreating(modelBuilder); }
을하지만 그 또한 시도
The model backing the 'SalesDataStore' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269)
을 생산
OnModelCreating
메소드를 사용하여 18,2 십진법을 모두 제거하십시오. 위와 같은 예외 - source code을 처음부터 빌드하고
DecimalPropertyConvention
클래스에서 기본 배율을 4로 변경합니다. 같은 예외.
모델 매핑에서 변경하거나 기본 규칙을 제거하는 경우 새 마이그레이션을 만들어야합니다. 너 해봤 니? –
흠, 나는 그것에 대해 생각하지 않았습니다. 그것을 지금 시도하고있다. ... – HiredMind
그것은 일했다. 나는 OnModelCreating이 마이그레이션 목적을 위해 검사되었는지 알지 못했을 것입니다. 모델을 만들기 전에 무언가를 조정하는 것이 단순한 고리라고 생각했습니다. 만약 당신이 대답을 게시하면 나는 그것을 인정할 것입니다 - 나는 다른 사람들이이 방법의 본질에 대해 불분명하다고 생각합니다. – HiredMind