Десятичное число точность и масштабирование в EF Code First

Я экспериментирую с этим первым подходом к коду, но теперь я обнаружил, что это свойство типа System. Десятичное число сопоставляется со столбцом sql типа decimal (18, 0).

Как настроить точность столбца базы данных?

213
задан kjbartel 24 January 2016 в 15:08
поделиться

1 ответ

По-видимому, вы можете переопределить метод DbContext.OnModelCreating () и настроить точность следующим образом:

protected override void OnModelCreating(System.Data.Entity.ModelConfiguration.ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Product>().Property(product => product.Price).Precision = 10;
    modelBuilder.Entity<Product>().Property(product => product.Price).Scale = 2;
}

Но это довольно утомительный код, когда вам нужно делать это со всеми вашими, связанными с ценой properties, поэтому я придумал следующее:

    protected override void OnModelCreating(System.Data.Entity.ModelConfiguration.ModelBuilder modelBuilder)
    {
        var properties = new[]
        {
            modelBuilder.Entity<Product>().Property(product => product.Price),
            modelBuilder.Entity<Order>().Property(order => order.OrderTotal),
            modelBuilder.Entity<OrderDetail>().Property(detail => detail.Total),
            modelBuilder.Entity<Option>().Property(option => option.Price)
        };

        properties.ToList().ForEach(property =>
        {
            property.Precision = 10;
            property.Scale = 2;
        });

        base.OnModelCreating(modelBuilder);
    }

Хорошая практика - вызывать базовый метод, когда вы переопределяете метод, даже если базовая реализация ничего не делает.

Обновление: Эта статья также была очень полезной.

47
ответ дан 23 November 2019 в 04:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: