2011-09-28 27 views
11

Tôi muốn sử dụng hai nguồn dữ liệu khác nhau trong dự án Azure tôi:EF với Azure - Trộn SQL Server và Windows Azure lưu trữ

  • một SQL Server chứa cơ bản thông tin một phần về một mục (cho phép dữ liệu có thể lập chỉ mục và tìm kiếm không gian)
  • a Lưu trữ Windows Azure có chứa thông tin còn lại đầy đủ liên quan đến một mục (truy xuất bằng khóa)

Bằng cách này tôi có thể kết hợp sức mạnh của SQL Server với khả năng mở rộng dễ dàng của Windows Azure Storage.

Hãy tưởng tượng này lớp miền POCO:

class Person 
{ 
    string Id { get; set; } 
    string Name { get; set; } 
    byte[] Picture { get; set; } 
    string Biography { get; set; } 
} 

Tôi muốn sử dụng Entity Framework với bản đồ thành thạo để cho EF hiểu rằng các thuộc tính Ảnh và Biography phải được nạp từ Windows Azure lưu trữ (bảng, blob) thay vì SQL Server (có thể tải Lazy).

Có cách nào với EF (hoặc NHibernate) để thực hiện việc này hoặc tôi phải triển khai chiến lược ORM của riêng mình?

Cảm ơn

Trả lời

6

Tôi không nghĩ rằng bạn có thể cho EF biết về lưu trữ Azure nhưng bạn có thể lập bản đồ thuộc tính chỉ cần một bảng cụ thể. Ví dụ:

modelBuilder.Entity<Person>().Ignore(p => p.Picture); 

Vì vậy, giả sử bạn có một lớp lưu trữ cho lớp Person, bạn muốn có thể dễ dàng đạt được bằng cách điền lớp lưu trữ với Azure storage API và EF.

6

Bạn đang cố giải quyết vấn đề này quá sớm (theo DAL) theo ý kiến ​​của tôi. Nhìn vào trang web, nó tìm nạp dữ liệu lớn (ví dụ: hình ảnh) trong một cuộc gọi riêng đến máy chủ. Điều đó đã thu nhỏ rất tốt. Các dữ liệu hình ảnh không được bao gồm trong tài liệu chính nó vì một lý do, nó sẽ chỉ làm chậm tất cả mọi thứ xuống và nó sẽ không được rất lỗi khoan dung. Nếu bạn đặt chúng lại với nhau trong một thực thể, bạn có thể truy xuất nhanh đối tượng bị chậm lại bởi máy chủ ảnh của bạn vì cả hai đều phải cùng nhau trước khi rời khỏi lớp kinh doanh của bạn và cuối cùng hướng tới lớp trình bày. Và trong lớp kinh doanh, dữ liệu này có lẽ chỉ lãng phí bộ nhớ (đó là lý do tại sao bạn muốn tải nó xuống). Vì vậy, tôi nghĩ rằng bạn đang đưa ra quyết định quá sớm. Những gì bạn mô tả như đối tượng miền của bạn trông giống như một đối tượng miền của lớp trình bày với tôi, tương tự như một ViewModel. Tôi không quá lớn vào thiết kế điều khiển miền, nhưng trong khi có một mô hình chung của ứng dụng của bạn, tôi giả định rằng mỗi phần của ứng dụng của bạn sẽ yêu cầu triển khai hơi khác một chút so với mô hình đó.

Về tải chậm, nếu bạn đã bật tính năng này và bạn cố gắng gửi đối tượng qua dây, ngay cả khi Picture không được tải, nó sẽ được serialized kể từ khi serializer hợp đồng dữ liệu (hoặc bất kỳ khác) sẽ gọi vào bất động sản.

Đó có lẽ không phải là câu trả lời bạn muốn, nhưng tôi cảm thấy rằng tôi phải nói điều này. Tất nhiên tôi mở cửa cho ý kiến ​​và phê bình.

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