Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在数据库中仍仅以十进制形式存储的复杂类型_C#_Asp.net Core_Model_Asp.net Core Mvc_Entity Framework Core - Fatal编程技术网

C# 在数据库中仍仅以十进制形式存储的复杂类型

C# 在数据库中仍仅以十进制形式存储的复杂类型,c#,asp.net-core,model,asp.net-core-mvc,entity-framework-core,C#,Asp.net Core,Model,Asp.net Core Mvc,Entity Framework Core,因此,我们在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

因此,我们在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显示

我知道我可以创建一个类,其中包含这三个元素,但实体框架迁移不会为TotalCost和TotalBill创建十进制列。他们需要与新的类实体建立一个关系,从而生成一个复杂的映射,这似乎有点过分了


我可以创建某种属性吗?

数据库中有各种货币货币、半货币、y等选项,它们通常转换为十进制C。在我的一个系统中,我只使用英镑进行交易,我使用这种格式

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

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

我已尝试使用DisplayFormat属性。遗憾的是,我们无法弄清楚如何根据CostCurrency属性中的内容使该属性动态化,请记住我应用此属性的属性和CostCurrency都在同一个类中。可以使用YourAmount.ToStringC,new CultureInfo GB;如果您有数量和区域性,那么这应该在只读属性中工作。遗憾的是,当我尝试在我看来这样做时,我得到了以下结果:InvalidOperationException:模板只能用于字段访问、属性访问、一维数组索引、,或者单参数自定义索引器表达式。DataAnnotations实际上只是一条指令。建议为执行该操作的方法创建自己的@Html.displaycurrency。您可以在此方法中检查类型和强制转换,然后允许您输出所需的文本