2009-11-05 4 views
5

Tôi đang di chuyển aplication của công ty của tôi (mà ngày nay chạy trên SQL Server và Oracle) để ASP NET MVC và Entity Framework cho persistence.Entity Framework - Bản đồ số thập phân (13,0) vấn đề

Tạo mô hình thực thể dựa trên cơ sở dữ liệu SQL Server riêng biệt tôi tạo SSDL cho Oracle (đối với Oracle tôi sử dụng DevArt dotConnect cho nhà cung cấp Oracle) và tôi gặp một số rắc rối về đau.

Các khóa chính của bảng là trên SQL Server có kiểu thập phân (13,0) và trên Oracle là số (13,0) nhưng bản đồ Oracle có kiểu Int64 và SQL Server thành số thập phân, nhưng tôi cần SQL Server đó ánh xạ nó tới Int64.

tôi làm cho những thay đổi bằng tay trên Entity Data Model và tạo các bản ghi nó hoạt động tốt, nhưng khi tôi phải xóa hoặc cập nhật một số kỷ lục Tôi đã nhận những lỗi:

Các giá trị quy định không phải là một thể hiện của loại ' Edm.Decimal ' Tên thông số: giá trị

at System.Data.Common.CommandTrees.DbConstantExpression..ctor(DbCommandTree commandTree, Object value, TypeUsage constantType)
at System.Data.Mapping.Update.Internal.UpdateCompiler.GenerateValueExpression(DbCommandTree commandTree, EdmProperty property, PropagatorResult value)
at System.Data.Mapping.Update.Internal.UpdateCompiler.GenerateEqualityExpression(DbModificationCommandTree commandTree, EdmProperty property, PropagatorResult value)
at System.Data.Mapping.Update.Internal.UpdateCompiler.BuildPredicate(DbModificationCommandTree commandTree, PropagatorResult referenceRow, PropagatorResult current, TableChangeProcessor processor, Boolean& rowMustBeTouched)
at System.Data.Mapping.Update.Internal.UpdateCompiler.BuildDeleteCommand(PropagatorResult oldRow, TableChangeProcessor processor)
at System.Data.Mapping.Update.Internal.TableChangeProcessor.CompileCommands(ChangeNode changeNode, UpdateCompiler compiler)

Ai đó có thể giúp tôi?

Tại sao ánh xạ khung thực thể được khắc phục như vậy? Nó có thể linh hoạt hơn?

Ps .: Lỗi mà tôi nhận được, tôi nghi ngờ đó là do sự liên kết.

Tôi có một Pháp nhân có tên Tỉnh và một quốc gia khác có tên là Quốc gia và tôi nghĩ rằng sự liên kết giữa các Thực thể này đang gây ra sự cố khi cập nhật và xóa.

Kính trọng,

Douglas Aguiar

Trả lời

2

này có thể hoặc không thể giúp bạn, nhưng tôi đã có những lỗi tương tự từ làm điều tương tự. Vì vậy, tôi đã chỉnh sửa mô hình Khái niệm và thay đổi trường khóa chính từ Int32 thành Thập phân. Cho đến nay, dường như có những thứ cố định. Tôi vẫn cần phải kiểm tra một lần nữa chống lại Sql Server và chắc chắn rằng điều này đã không phá vỡ nó.

0

Tôi đã gặp lỗi "Giá trị được chỉ định không phải là một thể hiện kiểu 'Edm.Decimal' Tên thông số: giá trị" như bạn đã đăng trong câu hỏi của mình. Tôi đã thay đổi kiểu dữ liệu mặc định từ Decimal thành Int32 vì điều này phản ánh đúng hơn việc gõ đúng. Khi tôi lần đầu tiên nhấn lỗi này, tôi đã khôi phục các thay đổi kiểu và vẫn nhận được một ngoại lệ nhưng nó chỉ thay đổi một chút nhưng dẫn đến việc đào sâu hơn nữa. Tóm lại, trong kịch bản của tôi, chúng tôi đã mong đợi một trình kích hoạt để điền PK trong suốt thời gian tồn tại qua chỉ thị Trước khi chèn. Vấn đề là lớp miền được xây dựng bởi EF đã thiết lập PK ở mức 0 để kích hoạt không bao giờ được kích hoạt khi PK đến không phải là rỗng. Tất nhiên EF sẽ không cho phép bạn thiết lập Entity PK thành nullable. Có lẽ điều này sẽ giúp người khác trong tương lai.