Сложный тип, который до сих пор хранится в базе данных только как десятичный - PullRequest
0 голосов
/ 09 мая 2018

Итак, у нас есть модель в ASP.net Core 2.0 MVC с использованием Entity Framework, эта модель имеет десятичные поля.

[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) дисплей

Я знаю, что могу создать класс, в котором были бы все три, но тогда миграции Entity Framework не будут создавать десятичные столбцы для TotalCost и TotalBill. Им потребуется отношение к новому классу (сущности), создающему сложное отображение, которое кажется немного излишним.

Могу ли я сделать какой-нибудь атрибут?

1 Ответ

0 голосов
/ 09 мая 2018

В базе данных есть различные опции для валюты (деньги, демик (x, y) и т. Д.), Которые обычно переводятся в десятичную форму в C #. В одной из моих систем, в которой я работаю только в фунтах, я использую это форматирование.

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

Посмотрите, есть ли перегрузки для разных типов валют, которые вам нужны

...