我试图用来Entity Framework
存储和检索一些对象,其中一个属性是我无法控制的类。
为了描述这个问题,假设我正在尝试持久Arc
化对象:
class Arc {
public Angle start { get; set; }
public Angle end { get; set; }
// ... other properties ...
}
但我没有对Angle
源代码的写访问权限,它有一个像这样的公共接口:
class Angle {
public enum Unit { Radians, Degrees };
public Angle(double value, Unit units); // constructor
public float Radians() { get; } // returns angle value in radians
public float Degrees() { get; } // returns angle value in degrees
}
我想我可以在 DbContext 的OnModelCreating()
方法中做一些事情来将角度字段映射到数据库中的浮点列,但是尽管阅读了MSDN
文档,我还是无法弄清楚我需要做什么来完成这个。
在存储对象时,我不知何故需要读取角度的度(或弧度)属性,然后Angle
在检索它们时使用该值构造一个新的。我怎样才能做到这一点?
编辑:我想到了一个糟糕的解决方案,即不映射角度属性,并为每个属性添加一个额外的映射属性来进行转换,如下所示:
public float start_degrees { get { return start.Degrees; }
set { start = new Angle(value, Angle.Degrees); }
}
但我宁愿避免这种情况,因为我的对象有很多这种性质的属性,所以这意味着添加更多。我希望有一个更简单的解决方案。