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

Ram*_*rez 27 entity-framework ef-code-first entity-framework-ctp5

在这篇博客文章中:EF4 Code First Control Unicode和Decimal Precision,Scale with Attributes,Dane Morgridge使用属性来控制数据库中不同类型的创建.

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

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

抱歉,我的英语不是我的主要语言.

提前致谢.

Mor*_*avi 50

例如,考虑这个Invoice类:

public class Invoice
{
    public int InvoiceId { get; set; }                
    public decimal Amount { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

你可以使用流畅的API来做到这一点:

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

或者您可以使用数据注释来完成:

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

    [Column(TypeName="Money")]
    public decimal Amount { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

  • EF 4.3.1修复了此问题,其中Column属性未被遵守.使用[Column(TypeName ="Money")]现在按预期工作.http://blogs.msdn.com/b/adonet/archive/2012/02/29/ef4-3-1-and-ef5-beta-1-available-on-nuget.aspx (5认同)

Kim*_*jan 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";
    }
}
Run Code Online (Sandbox Code Playgroud)

然后就像那样使用

[Money]
public decimal Value { get; set; }
Run Code Online (Sandbox Code Playgroud)