5

Tôi đang sử dụng ứng dụng ODP.NET được quản lý của Oracle với Entity Framework. Nó hoạt động tốt. Tuy nhiên tôi có những hành vi khác nhau trong các máy chủ khác nhau. Tôi khá chắc chắn nó có cái gì để làm với các phiên bản DLL, nhưng tôi không thể tìm thấy bất kỳ sự khác biệt cho đến nay.EF + ODP.NET: Giá trị được chỉ định không phải là một thể hiện kiểu 'Edm.Decimal'

tôi có các bảng:

create table parent (
    parent_id number primary_key, 
    data varchar2(100) 
); 
create table child (
    child_id number primary key, 
    parent_id number references parent(parent_id) 
); 

Và những thực thể:

public class Parent { 
    Int32 Id { get; set; } 
    string Data { get; set; } 
} 
public class Child { 
    Int32 Id { get; set; } 
    Parent Parent { get; set; } 
} 

Đây là mã:

Entities e = new Entities(connectionString); 
Parent p = new Parent(); 
parent.Data = "TEST DATA!"; 
Child c = new Child(); 
c.Parent = p; 
e.Children.AddObject(c); 
e.SaveChanges(); // exception here, in one server, not on the other 

Tôi có một kích hoạt tự động Populating id trên cả hai (cha mẹ và con), và tôi sử dụng Store Generated Pattern = Identity trên khung cấu hình thực thể .

Vấn đề của tôi là:

Trên máy dev của tôi, nó hoạt động hoàn hảo như mong đợi. Cả hai hàng được chèn vào các bảng tương ứng của chúng. Tuy nhiên, trên máy chủ, tôi nhận được một lỗi nói: The specified value is not an instance of type 'Edm.Decimal'. Thông tin

thêm:

Oracle.ManagedDataAccess (v 4.121.1.0) Entity Framework (v v4.0.30319.1)

Trên cả: máy dev (làm việc) + máy chủ (không hoạt động).

Ý tưởng?

+0

Tôi cũng đang gặp vấn đề tương tự. Triển khai máy chủ QA của tôi là tốt, nhưng sản phẩm của tôi không hoạt động. Tôi có kích thước loại của tôi được đặt thành Số (20) và loại .NET của tôi. Thật kỳ lạ và những gợi ý cho đến nay để thay đổi sang thập phân không có ý nghĩa với tôi vì nó hoạt động trong một số môi trường nhất định. FYI, sẽ đọc, chỉ cần không chèn hoặc cập nhật. – CameronP

Trả lời

4

Thử thay đổi định nghĩa của cột Id từ Int32 thành Decimal. Tôi đã có vấn đề này nhiều lần và tôi nghĩ rằng cố định nó.

public class Parent { 
    Decimal Id { get; set; } 
    string Data { get; set; } 
} 
public class Child { 
    Decimal Id { get; set; } 
    Parent Parent { get; set; } 
} 
0

Cài đặt .Net 4.5 nên khắc phục vấn đề này như được xác định trên Microsoft forum này. Tôi đã gặp vấn đề tương tự là các cuộc gọi làm việc tốt trên một máy dev nhưng thất bại trong sản xuất và, mặc dù dự án của tôi đã nhắm mục tiêu .net 4, cài đặt .net 4.5 giải quyết vấn đề.

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