我们正在使用Entity Framework Core 2.0
我希望有一个模型为其中一个字段使用Money类型,并使用十进制类型的支持字段。
目标是将支持字段存储在数据库中。
public class Order
{
private decimal _orderValue;
public int Id { get; set; }
public Money OrderValue
{
get => new Money(_orderValue);
set => _orderValue = value.Amount;
}
}
所以Money类不是实体,而是用作类型。所以我们根本不需要资金进入数据库。但是我们想要存储支持小数。 我如何确保EF创建并存储_orderValue私有字段?
答案 0 :(得分:2)
如何确保EF创建并存储_orderValue私有字段?
您可以通过更好地使用EF Core 2.1(自2018年5月7日开始在Release Candidate 1中)来摆脱支持字段,您可以使用Microsoft解释的值转换功能here:
值转换器允许在读取时转换属性值 来自或写入数据库。此转换可以来自一个值 到另一个相同类型(例如,加密字符串)或从 一种类型的值到另一种类型的值(例如, 将枚举值转换为数据库中的字符串。)
因此,对于您的情况,您可以删除支持字段。你不再需要它。你的课应该是这样的:
public class Order
{
public int Id { get; set; }
public Money OrderValue { get; set; }
}
在您的OnModelCreating
方法中,您可以按如下方式配置转换:
modelBuilder.Entity<Order>()
.Property(p => p.OrderValue)
.HasConversion(
v => v.Amount, // <- This is used when storing to the DB
v => new Money(v) // <- this is used when reading data from your DB
);
就是这样。实际上它是候选版本,但微软说:
EF Core 2.1 RC1是一个“go live”版本,这意味着一旦你测试了它 您的应用程序与RC1正常工作,您可以使用它 制作并获得微软的支持,但你仍然应该 一旦可用,就更新到最终的稳定版本。