gpt4 book ai didi

c# - 在 Entity Framework 对象中使用外部对象

转载 作者:行者123 更新时间:2023-11-30 17:57:17 25 4
gpt4 key购买 nike

我正在尝试使用 Entity Framework 来存储和检索一些对象,其中一个属性是一个我无法控制的类。

为了描述这个问题,假设我正在尝试持久化 Arc 对象:

class Arc {
public Angle start { get; set; }
public Angle end { get; set; }
// ... other properties ...
}

但我没有对 Angle 源代码的写入权限,它有一个类似于这样的公共(public)接口(interface):

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 文档,我我无法弄清楚我需要做什么才能完成此任务。

我在存储对象时不知何故需要读取角度的 Degrees(或 Radians)属性,然后在检索它们时使用该值构造一个新的 Angle。我该怎么做?

编辑:我想到了一个糟糕的解决方案,即不映射角度属性,并为每个属性添加一个额外的映射属性以进行转换,如下所示:

public float start_degrees { get { return start.Degrees; }
set { start = new Angle(value, Angle.Degrees); }
}

但我宁愿避免这种情况,因为我的对象有很多这种性质的属性,所以这意味着要添加更多。我希望有一个更简单的解决方案。

最佳答案

可能我误解了这个问题,但让我试一试。这个怎么样?

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

关于c# - 在 Entity Framework 对象中使用外部对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13358834/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com