2011-11-02 19 views
5

Tôi đã gặp một số vấn đề liên quan đến tham chiếu vòng tròn khi chuyển đổi thực thể EF thành đối tượng json. Tôi đã tìm thấy một giải pháp mà làm việc cho tôi, nhưng tôi muốn biết những gì đang thực sự xảy ra khi im thêmseralizing các thực thể EF; vô hiệu hóa tạo Proxy và tải lười biếng?

context.ContextOptions.ProxyCreationEnabled = false; 

và/hoặc

context.ContextOptions.LazyLoadingEnabled = false; 

Người đầu tiên có vẻ là đủ để có được một đối tượng json đơn chiều. Tôi có nên sử dụng cả hai? Và họ thực sự làm gì? Có cách nào thông minh hơn không? Cảm ơn

+0

Tôi nhận thấy từ bài đăng cuối cùng của bạn rằng bạn đang sử dụng JavaScriptSerializer .. có lý do cụ thể nào không? Đây có phải là ứng dụng web không? Tôi nghĩ bạn nên thực hiện một cách tiếp cận khác để nhận được json của bạn, chẳng hạn như DataContractJsonSerializer hoặc thư viện Json.NET. –

+0

@SeanThoman Tôi đã thử sử dụng json.net, nhưng vẫn có ngoại lệ tham chiếu vòng tròn. Đây là ứng dụng biểu mẫu web asp.net 4.0 thông thường. Bạn có bất kỳ ví dụ sử dụng DataContractJsonSerializer? – Johan

Trả lời

6

Dòng đầu tiên tắt thế hệ thời gian chạy của lớp kế thừa từ lớp tổ chức của bạn. Lớp này thực sự được sử dụng trong suốt thời gian chạy. Không phải lớp của bạn. Thời gian chạy lớp này tạo ra có lẽ không phải là Serializable và đó là lý do tại sao dòng này (tắt thế hệ proxy) làm cho công việc serialization.

Dòng thứ hai tắt tải chậm. Vì vậy, giả sử bạn có thực thể cha mẹ và thực thể con. Khi bạn yêu cầu phụ huynh bạn không tải trẻ em khi tải lười biếng là trên. Khi nó tắt bất cứ khi nào bạn tải phụ huynh bạn tải tất cả các con của nó. Tôi nghĩ rằng đây là một cái gì đó bạn nên làm quen với nếu bạn đang sử dụng EF.

Chỉnh sửa: Nếu có vấn đề với tham chiếu vòng tròn thì bạn nên tắt tải chậm. Sau đó, khi bạn tuần tự hóa, bạn sẽ không cố gắng tuần tự hóa Trẻ em có tham chiếu đến Phụ huynh (tạo tham chiếu vòng tròn)

+0

Được rồi, nhưng nên vô hiệu hóa tải lười biếng làm các trick một mình sau đó? – Johan

+0

Như bạn đã nói. Dòng đầu tiên là đủ. –

+0

Yea, tôi chỉ không hiểu tại sao vô hiệu hóa tải chậm là đủ. Không nên loại bỏ các mối quan hệ với các thực thể khác? – Johan

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