2013-06-03 2 views
1

나는 POCO EF를 사용하기 위해 기존의 코드베이스를 리펙토링하려고하고있다. 현재 EntityObject s를 사용하지만 매핑 된 객체를 POCO에 "평평하게"매칭하는 사용자 정의 코드가 있습니다. 즉, 매핑 된 모든 클래스의 경우 현재 두 개의 관련 객체 인 MyClassEntityObject이라는 하나의 POCO가 있으며 MyClassEF이라는 하나의 추가 메소드가 있습니다. MyClass Flatten(). 이것은 끔찍한 것처럼 보입니다. 그러나 변환이 Flatten() 메소드에서 발생할 수 있기 때문에 데이터베이스에서 십진 유형이 무엇인지 모델링을 두 배로 변환하는 것이 매우 간단합니다.그 밖에도 EntityFramework POCO를 사용하여 십진수를 double에 매핑 할 수 있습니까?

이중 계산식은 분석 계산을 수행 할 때 상당히 빠르기 때문에 코드에서 사용됩니다. 십진 형식은 당시에 좋은 생각 인 것처럼 보였으므로 데이터베이스에서 사용되었을 가능성이 높습니다. EF가 수행하는 타입 매핑 제한. 불행히도 데이터베이스의 데이터 유형을 단순히 변경하는 것은 비효율적입니다. 왜냐하면 대부분의 유형이 여전히 형식을 double로 변환하지만 데이터베이스에서 십진수가 될 것으로 기대하기는하지만 사용하는 응용 프로그램이 너무 많기 때문입니다.

private double _myDouble; 
public double MyDouble { get { return _myDouble; } set { _myDouble = value; } 
public decimal MyDouble_asDecimal { 
    get { return Convert.ToDecimal(_myDouble); } 
    set { _myDouble = Convert.ToDouble(value); } 
} 

... 상당히 불쾌한 것 같다

그래서, 현재 내 모델 클래스를 수정 찾고 있어요 것은 이런 일을합니다. 이 일을하는 눈부신 명백한 더 좋은 방법을 놓치고 있습니까?

답변

0

간단한 확장 메서드 (들)에 대해 무엇 : 그래서 당신의 모델은 변경되지 것입니다 및 펼치기 방법은 이것이 당신이 :-)

을 원하는 경우 customer.DoubleValueProperty.ToDecimal();

확실하지 사용

public static class MyExtension 
{ 
    public static decimal ToDecimal(this double d) 
    { 
     return Convert.ToDecimal(d); 
    } 

    public static double ToDouble(this decimal d) 
    { 
     return Convert.ToDouble(d); 
    } 
} 

또한 매핑 및 병합을 사용하는 경우 automapper을 살펴 보는 것이 좋습니다. 고통을 많이 겪는다.

+0

나는 오해한다고 생각합니다. 매핑 단계를 생략하고 POCO EF 만 사용하고 싶지만 모든 십진 형식에 포함 된 코드를 사용하지 않아도됩니다. – adhocgeek