Создание полей типа денег с использованием кода EF CTP5

В этом сообщении в блоге: EF4 Code First Control Юникод и десятичная точность, масштаб с атрибутами, Dane Morgridge атрибуты для управления созданием разных типов в вашей базе данных.

... И я нашел это довольно уникальное BTW!!!

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

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

Спасибо заранее.

Ответ 1

Например, рассмотрим класс 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; }
}

Ответ 2

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; }