1

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

代码中使用了双精度类型,因为它们在执行分析计算时要快得多,十进制类型可能在数据库中使用,因为它们当时似乎是个好主意,而且以前的手动 ORM 没有类型映射限制英孚做的。不幸的是,现在简单地更改数据库中的数据类型是不切实际的,因为有很多应用程序使用它(尽管他们中的大多数仍然将类型转换为双精度,但他们仍然希望它在数据库中是十进制)。

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

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

...这似乎相当不愉快。我是否错过了一个明显的更好的方法来做到这一点?

4

1 回答 1

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

所以你的模型将保持不变,你的 flatten 方法只是使用customer.DoubleValueProperty.ToDecimal();

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

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

于 2013-06-03T17:00:48.767 回答