如何将小数映射到实体框架POCO的双倍?

时间:2013-06-03 16:05:08

标签: c# entity-framework efpocoadapter

我试图重构现有的代码库以使用POCO EF。目前它使用的是EntityObject s,但是有自定义代码可用于"展平"映射对象到POCO,即对于所有映射类,当前有两个相关对象,一个名为MyClass的POCO和一个名为EntityObject的{​​{1}},它有一个附加方法,带有签名{{ 1}}。我知道这看起来很糟糕,但是它允许将数据库中的十进制类型相对简单地映射到模型中的双重类型,因为转换可以在MyClassEF方法中进行。

代码中使用了双重类型,因为它们在执行分析计算时速度要快得多,数据库中可能使用了十进制类型,因为它们在当时看起来是个好主意,之前的手动ORM没有EF所做的类型映射限制。不幸的是,简单地更改数据库中的数据类型现在是不切实际的,因为有很多应用程序使用它(尽管它们中的大多数仍然将类型转换为double,但它们仍然期望它在db中是十进制的。)

所以,目前我正在考虑修改我的模型类,使其具有以下内容:

MyClass Flatten()

...这看起来相当不愉快。我错过了一个明显更好的方法吗?

1 个答案:

答案 0 :(得分:0)

简单的扩展方法怎么样:

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);
    }
}

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

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

另外,如果您正在使用制图和展平,我建议您查看automapper。带走了很多痛苦。