2012-08-23 2 views
3

기존의 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로 변경합니다. 같은 예외.
+0

모델 매핑에서 변경하거나 기본 규칙을 제거하는 경우 새 마이그레이션을 만들어야합니다. 너 해봤 니? –

+0

흠, 나는 그것에 대해 생각하지 않았습니다. 그것을 지금 시도하고있다. ... – HiredMind

+0

그것은 일했다. 나는 OnModelCreating이 마이그레이션 목적을 위해 검사되었는지 알지 못했을 것입니다. 모델을 만들기 전에 무언가를 조정하는 것이 단순한 고리라고 생각했습니다. 만약 당신이 대답을 게시하면 나는 그것을 인정할 것입니다 - 나는 다른 사람들이이 방법의 본질에 대해 불분명하다고 생각합니다. – HiredMind

답변

2

매핑이 모델을 정의합니다. 각 마이그레이션은 모델의 압축 된 XML 표현 (및 아마도 해시)을 저장합니다. 기본 규칙을 제거하는 것을 포함하여 매핑에서 아무 것도 변경하면 매핑 및 해시의 최종 XML 표현도 변경됩니다. EF는 이러한 해시를 사용하여 모델이 변경되었는지 여부를 확인합니다. 모델을 변경하면 새로운 마이그레이션이 있어야 작동합니다.

관련 문제