2013-08-15 31 views
5

Tôi có một phương pháp đăng bài api trên web chèn một hàng mới vào bảng của tôi trong cơ sở dữ liệu Oracle của tôi. Tôi đang gặp sự cố với khóa chính của bảng có giá trị chuỗi. Làm cách nào để thực hiện my_primary_key_seq.nextval trong Khung thực thể? Hiện tại mã này hoạt động nhưng nó sẽ vi phạm giới hạn duy nhất của PK khi một hàng mới được chèn qua biểu mẫu web .net cũ của chúng tôi sử dụng chuỗi giá trị tiếp theo làm khóa chính tiếp theo.Cách lấy giá trị chuỗi tiếp theo của Oracle trong .NET Entity Framework?

decimal nextPK = context.FORMPPs.OrderByDescending(p => p.PPID).FirstOrDefault().PPID + 1; 
item.PPID = nextPK; 
context.FORMPPs.Add(item); 
int result = context.SaveChanges(); 
+0

Điều này không thực sự trả lời câu hỏi của bạn, nhưng bạn cũng có thể đặt thuộc tính vào thuộc tính ID của tổ chức của bạn (như sau: '[DatabaseGenerated (DatabaseGeneratedOption.Identity)]') sẽ khiến khóa chính được tạo tự động . Sau đó, bạn có thể nhận được ID được gán cho hàng mới bằng cách lấy giá trị của thuộc tính ID của thực thể của bạn sau khi bạn gọi 'SaveChanges()'. –

+0

Tôi có thể chèn một hàng mới bằng cách thêm 1 vào khóa chính tối đa hiện tại nhưng nó cũng không làm tăng giá trị SEQUENCE vì vậy mặc dù mã hiện tại hoạt động, nếu ai đó chèn hàng mới bằng trang web web.xml cũ. sẽ bị ngắt vì số SEQUENCE không đồng bộ. – iCanObjSeeSharp

Trả lời

4

Tôi đã gặp vấn đề tương tự và giải quyết vấn đề này với sự trợ giúp từ trang web này và Oracle. Tôi giả sử bạn đang sử dụng Database First, vì bạn đã đề cập đến một ứng dụng cũ khác sử dụng cùng một cơ sở dữ liệu.

Có một vài điều tôi phải làm. Giống như Daniel Gabriel đã đề cập, nếu bạn cho phép Oracle quản lý danh tính, bạn không cần phải gọi trình tự để tìm ra số, cơ sở dữ liệu sẽ xử lý nó cho bạn. Nhưng việc đó là một chút khó khăn bởi vì bạn có thể cần phải thực hiện một loạt các thay đổi đối với cơ sở dữ liệu.

  1. Tạo chuỗi (bạn đã thực hiện việc này) trên cột nhận dạng.

  2. Tạo trình kích hoạt để tự động gọi trình tự khi chèn. http://www.oracle-base.com/articles/misc/autonumber-and-identity.php

  3. Thay đổi mô hình Khung thực thể của bạn. Tôi đã sử dụng cơ sở dữ liệu EF Đầu tiên, và tìm thấy bài viết này giải thích tôi cần phải thay đổi mô hình để thiết lập thuộc tính của cột sắc của bảng để

    StoreGeneratedPattern="Identity"

Oracle entity in VS entity framework doesnt update the primary key in code

  1. Nhưng tôi không thích thực tế là tôi phải thêm lại thay đổi này mỗi khi tôi làm mới mô hình EF của mình từ cơ sở dữ liệu. Bấm đúp vào tệp .edmx, sau đó định vị bảng của bạn trong sơ đồ cơ sở dữ liệu, đánh dấu cột nhận dạng trong biểu đồ và trong cửa sổ thuộc tính, thay đổi giá trị StoreGeneratedPattern thành Identity. Điều đó sẽ làm cho nó tồn tại ngay cả khi bạn cập nhật mô hình EF của bạn.
Các vấn đề liên quan