我正在尝试使用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
文档,我还是无法弄清楚我需要做些什么来实现这一目标。
我在某种程度上需要在存储对象时读取角度的度数(或Radians)属性,然后在检索它们时使用该值构造新的Angle
。我怎么能这样做?
public float start_degrees { get { return start.Degrees; }
set { start = new Angle(value, Angle.Degrees); }
}
但我宁愿避免这种情况,因为我的对象有很多这种性质的属性,所以这意味着要添加更多。我希望有一个更简单的解决方案。
答案 0 :(得分:1)
可能我误解了这个问题,但让我试一试。这个怎么样?
public class MyOwnTypeOfAngle
{
public MyOwnTypeOfAngle(Angle input)
{
this.Radians = input.Radians;
this.Degrees = input.Degrees;
}
public double Radians { get; set; }
public double Degrees { get; set; }
}
在任何情况下,如果要在EF中更改DbSet的配置,请设置以下内容:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new MyNewConfigurationType ());
}
的更新强> 的 好吧,我没有深入配置,但我希望这可能会引导你朝着正确的方向前进:
class MyNewConfigurationType : EntityTypeConfiguration<Arc>
{
public MyNewConfigurationType()
{
Ignore<Angle>(y => y.start);
Ignore<Angle>(y => y.end);
Property<float>(x => x.start.Degrees).HasColumnName("myStartDegrees");
Property<float>(x => x.end.Degrees).HasColumnName("MyEndDegrees");
}
}