2011-01-28 148 views
20

在此博客文章中:EF4 Code First Control Unicode and Decimal Precision, Scale with Attributes,Dane Morgridge使用屬性來控制數據庫上不同類型的創建。使用代碼優先生成錢類型字段EF CTP5

...我發現這個非常獨特的BTW!

如何使用EF CTP5的代碼優先API在生成的數據庫中生成貨幣類型字段,如果可以使用約定或屬性從您的模型中完成它?

對不起,我的英語不是我的主要語言。

在此先感謝。

+2

一般來說(除非你使用現有的數據庫模式),我會避免使用SQL money數據類型。你最好使用具有特定精度和比例的小數以滿足你的應用需求 – 2011-01-28 15:31:57

+2

@Damien有趣......爲什麼是這樣? – 2011-06-20 20:20:49

+0

相關,使用錢類型參數與EF遷移工作:http://stackoverflow.com/questions/27696728/dbmigration-alterstoredprocedure-entity-framework-migration-how-to-represent – 2015-10-27 14:50:34

回答

40

例如,請考慮這樣的發票類:

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