2012-04-10 41 views
10

Tôi có một loại thực thể được gọi là Hình ảnh kế thừa từ Ấn phẩm (có 5 loại ấn phẩm khác, tất cả đều chia sẻ 10 thuộc tính chung). Thật không may, Bảng Hình ảnh trong DB của tôi bao gồm 4 cột nhị phân với dữ liệu cho 4 phiên bản của hình ảnh ở các độ phân giải khác nhau, do đó, có 4 thuộc tính của loại hình ảnh EF: BinOriginal, BinHiRes, BinLowRes, BinThumbnail, có chứa lượng dữ liệu rất lớn.Bảng phân tách một loại thực thể được kế thừa?

Điều này ảnh hưởng đến hiệu suất. Tôi không muốn lấy tất cả các dữ liệu nhị phân khi tôi chỉ tạo ra một loạt các liên kết hình ảnh, ví dụ.

Vì vậy, tôi đã cố gắng bàn tách, đặt 4 lĩnh vực nhị phân thành một thực thể ImageFile mới a la: http://blogs.msdn.com/b/adonet/archive/2008/12/05/table-splitting-mapping-multiple-entity-types-to-the-same-table.aspx

tôi đã chắc chắn bảng-bản đồ chính xác, bổ sung các hiệp hội 1-1 và bao gồm ràng buộc tham chiếu, nhưng tôi gặp phải lỗi này:

Error 3033: Problem in mapping fragments starting at line 2731:EntitySets 
'ImageFiles' and 'Publications' are both mapped to table 'Images'. Their primary 
keys may collide. 

... có vẻ như có vấn đề trong đó bảng đang được phân tách có liên quan đến mối quan hệ kế thừa.

tôi đã cố gắng kế thừa kiểu ImageFile EF mới từ bản, nhưng sau đó tôi nhận được một lỗi:

Problem in mapping fragments starting at lines 2332, 2374:Two entities with 
different keys are mapped to the same row 

HỎI Có cách nào để khắc phục điều này, hoặc không thực tế là tôi cần Image EF loại để kế thừa từ xuất bản ngăn cản tách ra các lĩnh vực khác thành một loại mới?

+1

Bạn có thể thay đổi giản đồ cơ sở dữ liệu không? I E. tạo một bảng riêng cho hình ảnh? –

+0

Vâng: đó là những gì tôi đã làm bây giờ như là một "work-around" (nó thực sự là một thiết kế DB tốt hơn, nhưng nó đã được nhiều hơn nữa làm việc cho rằng DB đã được sản xuất). Câu hỏi của tôi về việc chia bảng vẫn tồn tại - nó vẫn là một khía cạnh của EF mà tôi muốn hiểu. Nếu bạn có thể xác minh/tài liệu rằng nó không thể tách một bảng là một kiểu con trong một mối quan hệ thừa kế, điều đó sẽ đủ cho tôi chấp nhận một câu trả lời. – Faust

+0

OK, đã hiểu, nhưng tôi không chắc liệu mình có đi sâu vào đó không :). –

Trả lời

1

Bạn có thể coi đây là giới hạn của khung thực thể: thực tế có hai phần, Mô hình của mục cơ sở dữ liệu cơ sở và thực thể được xây dựng từ Mô hình. Lớp con của Thực thể không ảnh hưởng đến Mô hình nào.

Nếu bạn không muốn tải tất cả các dữ liệu cho một hàng Model, dự án nó:

var results = from product in myDB.Products 
       where product.Id == productId 
       select New 
       { 
        Id = product.Id, 
        Name = product.Name, 
        ImageUrl = product.ImageUrl 
       }; 

Truy vấn SQL Entity Framework chỉ tạo chọn các cột trong select khoản của Truy vấn LINQ.

Điều này cũng ngăn khung thực thể lưu trữ hàng trong bảng vào đối tượng ObjectContext (hoặc DBContext cho EF 5).

Là một lưu ý phụ, tôi muốn được cá nhân cám dỗ để lưu trữ dữ liệu nhị phân lớn trong một giải pháp NoSQL và chỉ duy trì khóa liên quan trong cơ sở dữ liệu SQL.

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