使用代码EF CTP5生成货币类型字段

时间:2011-01-28 15:16:28

标签: entity-framework ef-code-first entity-framework-ctp5

在此博文中:EF4 Code First Control Unicode and Decimal Precision, Scale with Attributes Dane Morgridge 使用属性来控制数据库中不同类型的创建。

......我发现这个非常独特的BTW !!!

如何使用EF CTP5的代码优先API在生成的数据库中生成货币类型字段,是否可以使用约定或属性从模型中执行此操作?

抱歉我的英语不是我的主要语言。

提前致谢。

2 个答案:

答案 0 :(得分:49)

例如,请考虑此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; }
}

答案 1 :(得分:11)

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