Gần đây tôi đã có nguyên nhân mang lại chỉ một giá trị duy nhất ngoài dữ liệu dạng bảng được trả về bởi quy trình được lưu trữ của tôi. Vì EF không hỗ trợ các thủ tục được lưu trữ với nhiều bộ kết quả, tôi đã tìm ra rằng tôi có thể thực hiện điều này thông qua một tham số đầu ra. Tuy nhiên, bằng cách sử dụng phương pháp này tôi gặp phải một vấn đề mà trong tôi đã nhận được chỉ làm tròn giá trị trở lại cho một số trường giá trị số.Làm thế nào để sử dụng đúng đối tượng InOut ObjectParameter trong EF4?
Các tham số thủ tục lưu trữ của tôi đã được khai báo là:
@MyValue numeric(19,6) output
Khi gọi chức năng lập bản đồ, tôi đã có:
var myValue = new ObjectParameter("MyValue", typeof(decimal));
List<MyResultItem> results = this.ObjectContext.CallMyStoredProc(someId, myValue).ToList();
Đây là những gì luôn được trả về giá trị làm tròn đến một số nguyên (ví dụ: , quy mô không).
tôi lần đầu tiên được thể khắc phục điều này bằng cách thủ công chỉnh sửa XML cơ bản đến .edmx bằng cách thủ công thêm chính xác và Scale thuộc tính:
<Parameter Name="MyValue" Type="numeric" Mode="InOut" Precision="19" Scale="6" />
Đây là, không đáng ngạc nhiên, hoàn toàn loại bỏ thời gian sau tôi thực hiện " Cập nhật mẫu từ cơ sở dữ liệu .."
tôi dường như đã cố định nó đáng tin cậy hơn bằng cách cập nhật tuyên bố của tôi cho ObjectParameter
như vậy:
var myValue = new ObjectParameter("MyValue", 999999999.999999M);
Tuy nhiên, điều này có vẻ khủng khiếp như hack, và tôi lo lắng về các vấn đề trong tương lai (ngay cả khi nó chỉ là bảo trì liên quan đến số ma thuật này). Có cách nào tốt hơn và đáng tin cậy hơn để sử dụng các tham số đầu ra trong khuôn khổ Entity Framework không?
Số thập phân trong .NET giữ chữ số của chúng để bạn thử sử dụng 0.0M hoặc 0.000000M thay vì để xem nó có hoạt động không? Điều đó ít nhất sẽ là một chút "ma thuật", tôi đoán nó rơi trở lại 0M mặc định (không có chữ số) – XIU
@XIU Không biết tại sao nó thực hiện điều này, nhưng nếu tôi vượt qua 0.M với bất kỳ số lượng dấu số không, sau đó kết quả 'myValue.Value' luôn luôn 0. Ngoài ra, các ObjectParameters sau đó tôi gửi vào truy vấn là DBNull thay vì nhận được thiết lập. Hoàn toàn kỳ quái. –
Có thể trùng lặp của http://stackoverflow.com/questions/18166992/decimal-output-parameter-rounded-to-integer-in-ef5-0 –