在数据库中仍仅存储为十进制的复杂类型

时间:2018-05-09 14:28:46

标签: c# asp.net-core model asp.net-core-mvc entity-framework-core

因此,我们在使用Entity Framework的ASP.net Core 2.0 MVC中有一个模型, 这个模型有十进制字段。

[Display(Name = "Total Cost")]
public decimal TotalCost { get; set; }

[Display(Name = "Total Bill")]
public decimal TotalBill { get; set; }

然后我们有另一对货币属性:

public CurrencyCode CostCurrency { get; set; }
public CurrencyCode BillCurrency { get; set; }

我根据货币

返回显示字符串
public string TotalBillDisplay => 
    CurrencyDisplayFormat(CostCurrencey, TotalBill);

public string TotalCostDisplay => 
    CurrencyDisplayFormat(BillCurrencey, TotalCost);

private string CurrencyDisplayFormat(CurrencyCode currencyCode, decimal amount) 
{
    return currencyCode.PreSymbol 
    + Math.Round(amount, currencyCode.DecimalDigits) 
    + currencyCode.PostSymbol;
}

对于每个货币价值而言,拥有3个属性感觉有点麻烦 1)十进制 2)货币 3)显示

我知道我可以创建一个包含所有这三个类的类,但是实体框架迁移不会为TotalCostTotalBill创建十进制列。他们需要与新类(实体)的关系,使得复杂的映射看起来有点矫枉过正。

我可以制作某种属性吗?

1 个答案:

答案 0 :(得分:1)

数据库中有各种货币选项(Money,demical(x,y)等),通常在C#中转换为十进制。在我处理磅数的系统中,我只使用这种格式。

[DisplayFormat(DataFormatString = "{0:£0.00}")]

查看您需要的各种货币类型是否存在重载