2017-04-07 14 views
5

Tôi muốn đặt độ chính xác của tất cả các thuộc tính thập phân thành (18,6). Trong EF6 này là khá dễ dàng:Lõi khung thực thể - thiết lập độ chính xác và tỷ lệ thập phân cho tất cả các thuộc tính thập phân

modelBuilder.Properties<decimal>().Configure(x => x.HasPrecision(18, 6)); 

nhưng tôi dường như không thể tìm thấy bất cứ điều gì tương tự như sau trong EF Core. Loại bỏ các thác xóa ước là không đơn giản như trong EF6 vì vậy tôi tìm thấy cách giải quyết như sau:

EF6:

modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>(); 
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>(); 

EF Core:

foreach (var relationship in modelBuilder.Model.GetEntityTypes().SelectMany(e => e.GetForeignKeys())) 
    relationship.DeleteBehavior = DeleteBehavior.Restrict; 

và sau khi tôi đọc this, tôi đã thử một cách tiếp cận tương tự:

foreach (var entityType in modelBuilder.Model.GetEntityTypes() 
    .SelectMany(x => x.GetProperties()) 
    .Where(x => x.ClrType == typeof(decimal))) 
     { 
      // what to do here? 
     } 

Tôi muốn nếu tôi ở bên phải giá và cách tiếp tục, hoặc nếu không, tôi có nên bắt đầu đặt chú thích dữ liệu trên tất cả các thuộc tính decimal hay không.

+0

Có phương pháp khá thô bạo, nhưng không biết nếu có thanh lịch và linh hoạt hơn. Bạn có thể cấu hình nó bằng 'modelBuilder.Entity (c => c.HasColumn (" DECIMAL (10,6 "))' để chỉ định kiểu cột. Tuy nhiên, nó có thể ghép bạn với một số loại DB nhất định từ các kiểu DB cụ thể – Tseng

+0

Bằng cách này tôi phải liệt kê tất cả các thuộc tính thập phân trong phương thức 'OnModelCreating' mà không khác với việc thêm DataAnnotations vào tất cả chúng, cái mà tôi đang cố tránh :) – GregoryHouseMD

+0

Vì tôi phải tiếp tục phát triển, tôi thiết lập tất cả 198 thuộc tính thập phân theo cách thủ công (hy vọng tôi không bỏ lỡ bất kỳ), nhưng nếu ai đó nghĩ về cách tôi có thể lặp lại tất cả chúng, vui lòng cho tôi biết – GregoryHouseMD

Trả lời

10

Bạn thân thiết. Đây là mã.

foreach (var property in modelBuilder.Model.GetEntityTypes() 
    .SelectMany(t => t.GetProperties()) 
    .Where(p => p.ClrType == typeof(decimal))) 
{ 
    property.Relational().ColumnType = "decimal(18, 6)"; 
} 
+1

Bạn đã ở đâu 3 giờ trước khi tôi bắt đầu nhập tất cả 200 tính chất? : D – GregoryHouseMD

+0

@GregoryHouseMD Nếu bạn đã làm một số tìm kiếm mặc dù, bạn có thể đã tìm thấy bản sao :) –

+0

Tôi đã làm và cũng nhận xét về một Q tương tự, nhưng không vấp ngã trên bản sao. Có bất kỳ khác biệt hiệu suất nào giữa câu trả lời này và câu trả lời trùng lặp không? – GregoryHouseMD

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