2012-04-16 3 views
2

소수점 (9,9)으로 정의 된 데이터베이스 필드가 있습니다. C 번호의 edmx 모델은 내가 변수에 숫자 5를 넣어 9여분의 소수점 이하 자리 추가 절약

의 정밀도와 스케일이 소수점 변수이 필드를 매핑합니다. 어디서나 확인할 수있는 값은 5 (로컬 변수, 엔티티 클래스 인스턴스, 데이터 컨텍스트 등) 값을 보여줍니다. DataContex.SaveChanges()시에는

는 값 "5.000000000"로 변환된다. 가장 좋은 방법은 엔티티 프레임 워크가 데이터베이스에 저장하기 전에 값에 소수점 9 자리를 추가한다고 말할 수 있습니다. 이제 값의 자릿수가 너무 많아서 오류가 발생합니다.

이 동작의 원인과 변경 방법을 알고있는 사람이 있습니까?

추가 정보 - 난 마이크로 소프트 SQL 2008 R2에 내 데이터베이스를 작성하여 시작했다. 그런 다음 데이터베이스에서 Entity Framework 모델을 생성했습니다.

+0

5를 문자열로 저장합니까? 아니면 10 진수로? 아니면 int? – abatishchev

+0

프로그램에서 5.0 값을 입력했습니다. 변수를 검사하면 Visual Studio에서 '십진수'값이 5로 표시됩니다. –

+0

@abatishchev 숫자 리터럴이라고 말하면 5.0은 두 배이지만 5.0m는 십진수입니다. – phoog

답변

2

, 당신은 문제가 생겼어요.
Microsoft에 따르면 첫 번째 숫자는 전체 자릿수이고 두 번째 숫자는 소수점 오른쪽 자릿수입니다.
이렇게 필드에 숫자 1을 저장하려면 .123456789 형식으로 저장하면됩니다. 5를 저장해야하는 경우 다른 형식이 필요합니다.

+0

참조 된 페이지는 값을 "최대"값으로 나열하고 필요한 ammount가 아닌 가능한 한도로 읽습니다. 나는 그것을 '십진수 (9,4)'로 변경하고 모든 것이 효과가 있었다. 귀하의 회신을 징표로 표시하고 있습니다. 고맙습니다. –

+0

네, 그렇게 읽으면 참조 페이지가 모호합니다. 그러나 SQL에서는 십진수가 실제로 고정 소수점 유형입니다 (더 유연한 C#의 10 진수와 반대). –

1

이 아니라, (데이터베이스에 다시 매핑) (9)의 정의 정밀도로 소수점을 위해 예상되는 엔티티 프레임 워크하지만, 특히이 아니다. 따라서 5를 입력하면 데이터가 정의 된 방식으로 인해 0이 소수점 뒤에 추가됩니다.

표준을 준수하기 위해 .NET 1.1 장소에 넣어 (I는 하나의 잊지). 표시 목적으로 Math.Round를 사용하여 항상 정밀도를 제거 할 수 있습니다 (또는 실제로 필요한 것과 다르게 데이터를 정의 할 수 있음).

당신이 정말로 데이터베이스에 decimal(9,9)로 데이터 유형을 정의한 경우
+0

정밀도 수준은 이미 C#에서 반올림되었습니다. 소수점의 오른쪽에있는 여분의 숫자가 저장시 추가됩니다. C#에서 제거 할 수있는 것은 없기 때문에 값은 소수점 또는 추가 숫자없이 5로만 표시됩니다. –

+0

@JeremyLund -이 링크의 정보 (http://stackoverflow.com/questions/3504660/entity-framework-code-first-decimal-precision)를 통해 정밀도를 재정의 할 수 있습니다. 나는이 특정한 상황에 결코 빠지지 않았기 때문에 귀하의 의견에 대한 답을 직접 알지 못합니다. – JasCav

+0

제안 해 주셔서 감사합니다.하지만 모델 우선을 사용하고 있으며 모델에 이미 데이터베이스와 일치하는 정밀도와 눈금 (9,9)에 대한 올바른 속성이 포함되어 있습니다. 그래서 나는이 정의 된 정밀도와 스케일을 뛰어 넘을 정도로 좌절감을 느낀다. –

관련 문제