Создайте поля типа денег, используя код EF CTP5 - PullRequest
27 голосов
/ 28 января 2011

В этом сообщении в блоге: Код EF4 Первый элемент управления Юникод и десятичная точность, Масштаб с атрибутами , Дейн Моргридж использовал атрибуты для управления созданием различных типов в вашей базе данных.

... И я нашел это довольно уникальное КСТАТИ !!!

Как генерировать поля типа денег в моей результирующей базе данных, используя API-интерфейс EF CTP5, основанный на коде, если это возможно сделать из вашей модели, используя условные обозначения или атрибуты?

Извините за мой английский не мой основной язык.

Заранее спасибо.

Ответы [ 2 ]

51 голосов
/ 29 января 2011

Например, рассмотрим этот класс Invoice:

public class Invoice
{
    public int InvoiceId { get; set; }                
    public decimal Amount { get; set; }
}

Вы можете сделать это с помощью свободного API:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Invoice>()
                .Property(i => i.Amount)
                .HasColumnType("Money");
}

Или вы можете сделать это с помощью аннотаций данных:

public class Invoice
{
    public int InvoiceId { get; set; }                

    [Column(TypeName="Money")]
    public decimal Amount { get; set; }
}
11 голосов
/ 29 января 2011
using System.Data.Entity.ModelConfiguration.Configuration.Properties.Primitive;

public class MoneyAttribute : Attribute { }

public class MoneyAttributeConvention : AttributeConfigurationConvention<PropertyInfo, DecimalPropertyConfiguration, MoneyAttribute> {
    public override void Apply(PropertyInfo memberInfo, DecimalPropertyConfiguration configuration, MoneyAttribute attribute) {
        configuration.ColumnType = "money";
    }
}

тогда вы так используете

[Money]
public decimal Value { get; set; }
...