2012-04-19 25 views
8

Tôi đang phát triển một ứng dụng lưu trữ tệp và chúng tôi đã kết hợp loại FileStream trong cơ sở dữ liệu của mình. Hệ thống dự kiến ​​sẽ hỗ trợ các tệp lớn. Một phần của ứng dụng cho phép tải lên hàng loạt nhiều tài liệu. Các tài liệu này sau đó phải được liên kết với các thực thể khác trong hệ thống.Làm cách nào để ngăn chặn Entity Framework tải cột FileStream thành một mảng byte?

Một trang được thiết kế để hiển thị các tài liệu chưa được liên kết, để cho phép người dùng liên kết từng tài liệu với các thực thể. Sau khi thực hiện một số thử nghiệm tải của quá trình tải lên, chúng tôi thấy rằng dấu chân bộ nhớ của quá trình nhân viên ASP.NET tăng vọt lên trên GB khi tải trang Tài liệu chưa được liên kết này.

Sau khi điều tra, có vẻ như Khuôn khổ thực thể đang tải toàn bộ thực thể hàng tài liệu (bao gồm cả FileStream, được chuyển đổi thành mảng byte) cho hàng trăm tài liệu chưa được liên kết. Trong lớp kho lưu trữ của tôi, tôi không lưu mảng byte này khi chuyển đổi sang một Mô hình, nhưng lúc đó đã quá muộn. EF đã dành thời gian và bộ nhớ để phân bổ mảng byte vào biểu diễn lớp Repository.

Có cách nào tôi có thể yêu cầu EF không tải mảng byte này trừ khi tôi yêu cầu không?

+1

http://stackoverflow.com/a/3293286/782754 là không thể thực hiện để đánh dấu một tài sản để tải lười biếng, nhưng bạn có thể sử dụng các khái niệm khác –

Trả lời

11

Garrison, bạn có thể sử dụng tính năng được gọi là "phân tách thực thể" nơi bạn ánh xạ hai thực thể liên quan thành một bảng. Vì vậy, trong thực thể đầu tiên bạn sẽ có tất cả trừ thuộc tính dòng phim. Trong thực thể thứ 2, bạn sẽ có khóa chính (giống như trong thực thể đầu tiên) và thuộc tính dòng phim. Tạo mối quan hệ một: một giữa các thực thể trong mô hình của bạn và sau đó ánh xạ cả hai thực thể vào cùng một bảng. Bây giờ thực thể với filestream có liên quan và bạn có thể tải hoặc tải nó khi cần thiết. Nhược điểm duy nhất là nó không phải là tài sản của thực thể chính của bạn, vì vậy bạn phải điều hướng đến thực thể liên quan và sau đó là thuộc tính.

myEntity.MyRelatedEntity.TheFileStreamProperty

Dưới đây là một old blog post tôi đã viết cho thấy làm thế nào để làm điều này trong thiết kế EDM.

Bạn cũng có thể đạt được ánh xạ tương tự với Mã FIrst. Đây là một bài viết MSDN tôi đã viết có chứa một bài viết tách thực thể. http://msdn.microsoft.com/en-us/data/hh272551

HTH Julie

+0

Cảm ơn, Julie. Đây chỉ là những gì tôi đang tìm kiếm! –

+0

tuyệt vời để nghe! :) –

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