2012-11-09 28 views
5

Tôi đang sử dụng EF 4 (cơ sở dữ liệu đầu tiên, mô hình được tạo đầy đủ từ nó) với cơ sở dữ liệu oracle 10g và tôi gặp sự cố với một trường.Chuyển đổi Int32 thành số Oracle (5) bằng EF4

Trường của tôi được xác định là NUMBER(5) trong cơ sở dữ liệu của tôi. Trong mô hình của tôi, EF đã định nghĩa nó là short. Vấn đề của tôi là tôi có một số giá trị lớn hơn 32,767 (tối đa là ngắn) Tôi tìm thấy bài đăng này: Entity Framework generates short instead of int. Tôi làm theo hướng dẫn và nó hoạt động, mô hình của tôi có giá trị Int32 bây giờ.

Nhưng tôi có một vấn đề mới:

Error 2019: Member Mapping specified is not valid. The type 'Edm.Int32[Nullable=True,DefaultValue=]' of member 'XX' in type 'Model.XXX' is not compatible with 'OracleEFProvider.number[Nullable=True,DefaultValue=,Precision=5,Scale=0]' of member 'XX' in type 'Model.Store.XXX'. 

Lỗi này luôn hiển thị trong danh sách Lỗi tab của Visual Studio. Tuy nhiên, việc xây dựng thành công, và nó nửa hoạt động:

  • đọc một giá trị trong cơ sở dữ liệu làm việc
  • viết một giá trị không làm việc: 99999 đã được chuyển đổi trong -31.073 (xem chỉnh sửa)

Is có một giải pháp để có nó hoạt động trên cả hai cách?

BTW, có cách nào để yêu cầu pháp nhân sử dụng int32 cho các trường INTEGER oracle không? Nó sử dụng số thập phân theo mặc định.

EDIT

Trong khi debuging từng bước, tôi thấy lý do tại sao giá trị của tôi là -31.073. Tôi đã quên dòng này:

dao.Value = (short)dto.Value; 

Hai giá trị của tôi là int, nhưng chuyển đổi ngầm ngắn gọn là nguồn gốc.

+0

Nó sử dụng 'thập phân' cho' Số' vì Số có thể là _12.433242_ số nguyên có thể giữ giá trị đó. Dù sao về câu hỏi của bạn, bạn có thử liên hệ với Oracle để có câu trả lời chính thức không? – gdoron

+0

Bạn có sử dụng Oracle Data Provider cho Oracle 11g không? Tôi sử dụng EF 4 với ODP cho Oracle 11g và tôi không có vấn đề gì với oracle INTEGER. –

Trả lời

6

Tôi đã tìm cách xóa lỗi.

Tôi chỉnh sửa các tập tin edmx trong chế độ xml, tìm thấy lĩnh vực của tôi trong phần ssdl:

<Property Name="SIT_INSEE" Type="number" Precision="5" /> 

tôi loại bỏ các Precision="5" và cảnh báo biến mất.

1

Chỉ cần thêm hai xu của tôi trong trường hợp bất kỳ ai khác có vấn đề tương tự. Tôi nhận thấy nếu bạn thêm sau đây để ánh xạ trong web.config và sau đó tạo lại mô hình edmx từ đầu (xóa nó và tái tạo từ cơ sở dữ liệu) nó giải quyết một số trong những vấn đề này. Trường hợp chỉ cần thêm các giá trị vào web.config không giải quyết được gì (có thể tạo lại một số mã đằng sau hậu trường sẽ là phỏng đoán của tôi).

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