2011-01-28 34 views
20

Trong bài đăng blog này: EF4 Code First Control Unicode and Decimal Precision, Scale with Attributes, Dane Morgridge các thuộc tính được sử dụng để kiểm soát việc tạo các loại khác nhau trên cơ sở dữ liệu của bạn.Tạo trường loại tiền bằng mã EF đầu tiên CTP5

... Và tôi đã tìm thấy BTW khá độc đáo này !!!

Làm cách nào để tạo trường loại tiền trong cơ sở dữ liệu kết quả bằng mã API đầu tiên của EF CTP5, nếu có thể thực hiện từ mô hình của bạn, sử dụng quy ước hoặc thuộc tính?

Xin lỗi về tiếng Anh của tôi không phải là ngôn ngữ chính của tôi.

Xin cảm ơn trước.

+2

Nói chung (và trừ khi bạn đang làm việc với lược đồ cơ sở dữ liệu hiện có), tôi sẽ tránh sử dụng kiểu dữ liệu tiền SQL. Bạn nên sử dụng các số thập phân có độ chính xác và quy mô cụ thể đáp ứng các yêu cầu ứng dụng của bạn –

+2

@Damien thú vị ... tại sao lại như vậy? –

+0

Có liên quan, để làm việc với di chuyển EF với thông số loại tiền: http://stackoverflow.com/questions/27696728/dbmigration-alterstoredprocedure-entity-framework-migration-how-to-represent –

Trả lời

40

Ví dụ, hãy xem xét lớp này Invoice:

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

Bạn có thể làm điều đó với API thông thạo:

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

Hoặc bạn có thể làm điều đó với dữ liệu Chú thích:

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

    [Column(TypeName="Money")] 
    public decimal Amount { get; set; } 
} 
+0

Thật không may, EF 4.3 (phiên bản phát hành) bỏ qua loại dữ liệu tiền và tạo ra định nghĩa thập phân (18,0) thay thế (Không tôn vinh thuộc tính Cột và cấu hình HasColumnType). Điều này chắc chắn là một lỗi. –

+4

EF 4.3.1 đã khắc phục sự cố này khi thuộc tính Cột không được tôn trọng. Sử dụng [Cột (TypeName = "Tiền")] hoạt động như mong đợi ngay bây giờ. http://blogs.msdn.com/b/adonet/archive/2012/02/29/ef4-3-1-and-ef5-beta-1-available-on-nuget.aspx –

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

thì bạn sử dụng như vậy

[Money] 
public decimal Value { get; set; } 
+0

BinaryPropertyConfiguration không có Thành viên HasColumnType, tôi thử phương pháp này nhưng nó không hoạt động –

+0

Xin lỗi, đúng là cấu hình.ColumnType = "Money" ;. Tôi chỉ chỉnh sửa bài đăng. Cảm ơn. –

+0

Vẫn không hoạt động ... Tôi không biết tại sao –

Các vấn đề liên quan