2011-07-01 31 views
8

Khung thực thể có trả về cùng một tham chiếu đối tượng không nếu tôi truy vấn đối tượng "hợp lý" (trong cơ sở dữ liệu) từ các vị trí khác nhau.Thực hiện tham chiếu đối tượng khung thực thể như nhau cho cùng một đối tượng cơ sở dữ liệu

Ví dụ, tôi truy vấn của khách hàng với tên Joe Black, (và giả định cho bây giờ tôi biết rằng chỉ có một Joe Black trong cơ sở dữ liệu.) Customer c = select ... blabla where ... Name == Joe Black...; và ở một nơi khác trong mã, tôi truy vấn Customer c2 = select... where.. ID==5 trong đó 5 là ID của Joe Black. Tôi biết rằng trong cơ sở dữ liệu họ ánh xạ tới cùng một đối tượng, nhưng DO chúng cũng ánh xạ tới cùng một đối tượng ở cấp mã? Vì vậy, c1 bằng c2? Tôi có danh sách để hợp nhất và kiểm tra sự bình đẳng hợp lý của các đối tượng (tôi không thể truy cập cơ sở dữ liệu bây giờ) và tôi đã tự hỏi liệu các đối tượng Entity Framework sẽ chơi độc đáo với nó hay tôi nên viết các lớp so sánh tùy chỉnh của tôi.

Trả lời

13

Hầu hết các ORM, bao gồm Khung thực thể và NHibernate, sử dụng Identity Map Pattern để đảm bảo chỉ có một cá thể duy nhất của một thực thể nhất định cho mỗi khóa chính. Bản đồ nhận dạng bị bối rối bởi bối cảnh, vì vậy hai bối cảnh khác nhau sẽ tạo ra hai đối tượng tham chiếu đến cùng một thực thể. Nó là một thực hành tốt để có thực thể thực hiện IEquatable, bao gồm ghi đè cho các toán tử bình đẳng để '==' hoặc '! =' Sẽ hoạt động. Điều này có liên quan nhiều hơn những gì người ta có thể nghĩ. Hãy xem here để biết ví dụ.

+0

Điều đó được trả lời bằng câu hỏi, cảm ơn bạn. Vì vậy, nó có nghĩa là công việc của tôi dễ dàng hơn, nhưng tôi không biết cách thêm các phương thức thực hiện hoặc các toán tử quá tải cho các lớp được tạo tự động của Entity Framework. Dù sao, có quyền truy cập vào DB của tôi một lần nữa và nó đã làm việc. Vì vậy, EF xử lý đó là tốt. –

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