C# 我还可以如何使用EntityFramework POCOs将小数映射为双精度?

C# 我还可以如何使用EntityFramework POCOs将小数映射为双精度?,c#,entity-framework,efpocoadapter,C#,Entity Framework,Efpocoadapter,我正在尝试重构现有的代码库以使用POCO EF。当前它使用EntityObjects,但有自定义代码将映射对象“展平”到POCO,即对于所有映射类,当前有两个相关对象,一个名为MyClass的POCO和一个名为MyClassEF的EntityObject的POCO有一个附加方法,该方法的签名为MyClass Flatten()。我知道这看起来很可怕,但它允许将数据库中的十进制类型相当直接地映射到模型中的双类型,因为转换可以在flatte()方法中进行 在代码中使用双类型是因为它们在执行分析计算时

我正在尝试重构现有的代码库以使用POCO EF。当前它使用
EntityObject
s,但有自定义代码将映射对象“展平”到POCO,即对于所有映射类,当前有两个相关对象,一个名为
MyClass
的POCO和一个名为
MyClassEF
EntityObject
的POCO有一个附加方法,该方法的签名为
MyClass Flatten()
。我知道这看起来很可怕,但它允许将数据库中的十进制类型相当直接地映射到模型中的双类型,因为转换可以在
flatte()
方法中进行

在代码中使用双类型是因为它们在执行分析计算时速度要快得多,而在数据库中可能使用十进制类型是因为它们在当时看起来是个好主意,而之前的手动ORM没有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); }
}

…这似乎很不愉快。我是否错过了一个显而易见的更好的方法呢?

一个简单的扩展方法如何:

因此,您的模型将保持不变,而展平方法只需使用
customer.DoubleValueProperty.ToDecimal()

不确定这是否是您想要的:-)


另外,如果您正在使用映射和展平,我建议您看看。消除了很多痛苦。

我想你误解了。我想省去映射步骤,只使用POCO EF,但我不想使用我为每种十进制类型提供的丑陋代码。
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);
    }
}