2010-09-07 12 views
6

Sử dụng khung Entity v4 và trình tạo đối tượng POCO tạo mẫu T4.Dừng EF từ các thực thể tải khi chỉ định Hiệp hội

Vấn đề tôi có là các phương pháp Fixup đang tải hàng trăm thực thể khi tôi gán một thực thể liên quan (xem dòng 4 bên dưới).

Dim context = New SomeEntities 
Dim list = context.Lists.FirstOrDefault(Function(l) l.ListId = 2) 
Dim queryDetail = context.CreateObject(Of QueryDetail)() 
queryDetail.CriteriaColumnType = context.CriteriaColumnTypes.FirstOrDefault(Function(cct) cct.CriteriaColumnTypeId = 145) 

Thực thể CriteriaColumnType đang được giao có một bộ sưu tập của QueryDetail đối tượng, và khi việc chuyển nhượng được thực hiện, phương pháp fixup trên thực thể CriteriaColumnType là lười tải tất cả các liên QueryDetails.

Làm cách nào để tạo liên kết FK và đính kèm pháp nhân CriteriaColumnType vào thực thể QueryDetail mà không tải tất cả các bản ghi CriteriaColumnType'sQueryDetail?

+0

Để làm rõ, bạn có một 'QueryDetail' với một thuộc tính được gọi là' CriteriaColumnType' chứa một tập hợp các 'QueryDetail' khác. –

Trả lời

1

Bạn có cần tải xuống ở đây không? Bạn có thể tắt tính năng này:

context.ContextOptions.LazyLoadingEnabled = false 
+1

Tôi thực sự xem xét việc sử dụng nó, nhưng nó cảm thấy giống như một hack. Có vẻ khó để tin rằng người dùng Enitity Framework bình thường thực sự muốn toàn bộ bộ sưu tập của entitiy liên quan được tải trong trường hợp này! –

+1

Tôi không nghĩ rằng nó là hacky. Bối cảnh là một đơn vị công việc. Không phải tất cả UOW đều cần tải chậm. Nó không phải ảnh hưởng đến UOW khác, có thể cần tải chậm. –

+1

Tôi đồng ý với Steve. Nếu cách duy nhất để tránh ứng xử này là tắt tải xuống, nó sẽ được coi là lỗi. Lý do duy nhất cho vấn đề này là theo dõi thay đổi (Thuộc tính điều hướng của FixUp trên cả hai mặt của hiệp hội). Mã gán giá trị cho thuộc tính điều hướng ở một bên. Nó lần lượt muốn gán giá trị cho bộ sưu tập điều hướng ở phía bên kia, nhưng vì truy cập vào bộ sưu tập nó bắt đầu tải chậm. –

1

Tôi cũng gặp sự cố này. Một hoạt động được sử dụng để mất mili giây bắt đầu mất 3-4 giây để chạy, tất cả vì tôi đã thêm thuộc tính điều hướng trỏ đến một bảng lớn.

Tôi đã giải quyết được sự cố bằng cách chỉ xóa tất cả mã sửa lỗi khỏi mẫu T4 - dự án của chúng tôi không cần chức năng đó. Tôi đã xóa mọi thứ khỏi dòng này:

region.Begin("Association Fixup"); 

sang vùng tiếp theo.End(). Tôi cũng đã xóa tất cả các cuộc gọi đến các phương thức sửa lỗi từ các trình xử lý thuộc tính, đăng ký các trình xử lý CollectionChanged và cờ _settingFK.


Xem câu hỏi này để biết thêm về lý do tại sao mã sửa lỗi ở đó: Why is "Fixup" needed for Persistence Ignorant POCO's in EF 4?. Nó đang cố gắng để đảm bảo rằng nếu bạn thay đổi một đầu của một hiệp hội hai chiều, đầu kia cũng được cập nhật. Vì vậy, ví dụ: nếu bạn tạo một BlogPost mới và đặt thuộc tính Người dùng cho người dùng, logic sửa lỗi sẽ tự động thêm bài đăng vào bộ sưu tập Bài đăng của người dùng.

marc_s đã trả lời câu hỏi khác bằng cách liên kết đến POCO Template Code Generation Options. Việc xóa mã sửa lỗi khỏi mẫu T4 sẽ thay đổi mẫu từ # 2 (POCO cơ bản bằng bản sửa lỗi) thành # 1 (POCO cơ bản không có bản sửa lỗi).

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