2012-07-24 37 views
7

Hãy để tôi giải thích tiêu đề.Cập nhật dữ liệu khung thực thể trong môi trường nhiều người dùng với cơ sở dữ liệu trung tâm

Tôi đang sử dụng Mã khung thực thể Trước tiên trong một ứng dụng (TestApp). Vì mục đích gỡ lỗi, TestApp kết nối với cơ sở dữ liệu SQLExpress (máy chủ cơ sở dữ liệu trung tâm).

Để giữ mọi thứ đơn giản ở đây, cơ sở dữ liệu chứa một bảng "Sản phẩm" và TestApp hiển thị tất cả "Sản phẩm" từ cơ sở dữ liệu trong DataGrid và TestApp có thể thêm/xóa "Sản phẩm" hoặc sửa đổi ProductName.

public class Product { 
public int ProductId { get; set; } 
public string ProductName { get; set; } 
} 

public DbSet<Product> Products { get; set; } 

Tôi có ví dụ 3 PC nơi TestApp được cài đặt và đang chạy (Tôi sẽ gọi chúng là Client_X). Nếu tôi thêm một "Sản phẩm" mới thông qua Client_1, thì điều này không hiển thị trực tiếp trong TestApp trên Client_2 và Client_3. Chỉ khi Client_2 và Client_3 lấy lại tất cả dữ liệu (làm mới thủ công) hơn tôi thấy bản ghi mới được thêm vào.

Điều tôi muốn biết: Làm thế nào tôi có thể nhận thức được những thay đổi trong cơ sở dữ liệu qua EF Code Đầu tiên? Client_2 và Client_3 sẽ được cập nhật tự động datagrid như thế nào vì một mục mới đã được thêm hoặc xóa?

Tôi không chắc chắn nếu nó được hỏi quá nhiều nhưng một dự án mẫu đơn giản hoặc mã đơn giản để chứng minh điều này sẽ hữu ích.

FYI: Tôi khá mới đối với mã EF đầu tiên. (Tôi đang sử dụng .NET 4.0 và EF Code Đầu tiên 4.3.1)

Xin cảm ơn trước.

Scheme:

Client_3< 
     \ 
      \ 
      \ 
      \ 
      \> 
Client_1 <---> [Central Database] <----> Client_2 

Cập nhật/Chỉnh sửa:

Ok, rõ ràng là Entity Framework tự nó không làm bất cứ đồng bộ giữa nhiều khách hàng.

Vì vậy, tôi sẽ hỏi một câu hỏi khác: Tôi đang nghĩ đến việc làm việc theo cách Client-Server:

  • Một ứng dụng máy chủ duy nhất mà tạo ra cơ sở dữ liệu và sử dụng Entity Framework mã đầu tiên.
  • Nhiều khách hàng giao tiếp với một máy chủ đơn đơn đăng ký.

    Điều gì sẽ là cách tốt nhất để đảm bảo khách hàng sử dụng cùng một dữ liệu và xem từng cập nhật/thay đổi? (Tôi sẽ đánh giá cao mẫu mã.)

+0

Tìm thấy câu hỏi liên quan: http://stackoverflow.com/questions/4852564/entity-framework-underlying-data-in-database-change-notification – juFo

+0

Tôi muốn làm chính xác điều tương tự, nhưng với ứng dụng web . Tôi có nhiều máy chủ web kết nối với cùng một DB - Prasad – Prasad

Trả lời

6

Không có gì bạn có thể sử dụng để thông báo cho khách hàng sử dụng khung thực thể. Bạn có thể viết quá tải cho SaveChanges hoặc tạo phương thức tiện ích nhưng theo như bạn không có kiến ​​trúc máy khách-> máy chủ, tôi không thể tưởng tượng cách bạn có thể đạt được điều này.

Nếu bạn sử dụng WCF làm cổng vào cơ sở dữ liệu, bạn có thể tạo giao tiếp song công giữa máy khách và máy chủ và bản ghi mới là khách hàng có sẵn sẽ được thông báo bằng cách sử dụng Callback Channel.

phương pháp khác là sử dụng MS SQL Service Broker Overview (Service Broker)

Mặc dù thực tế rằng có rất nhiều cách khác nhau để có được kết quả mong muốn, không ai trong số họ có liên quan đến khuôn khổ thực thể vì nó là ORM hay một khung ứng dụng hay Khung giao tiếp cho các ứng dụng được xây dựng với .NET.

2

Đây không phải là trách nhiệm của EF, nó là nhiều xuống để thiết kế ứng dụng nói chung của bạn. Một nền tảng tương đối đơn giản hoặc quá trình bỏ phiếu định kỳ sẽ giải quyết vấn đề của bạn.

Có nhiều cân nhắc hơn khi giao dịch với nhiều người dùng, chẳng hạn như khóa hồ sơ và có thể là một ý tưởng để nghiên cứu một chút về khía cạnh này và quay trở lại khi nào và khi nào bạn gặp sự cố cụ thể.

+0

Bỏ phiếu không phải là một giải pháp tốt? Tạo lưu lượng mạng bổ sung. Cơ sở dữ liệu có nhiều công việc hơn và nếu người dùng đang cuộn trong một biểu đồ dữ liệu, chế độ xem của anh ta sẽ có nghĩa là; mỗi phút được đặt lại vì làm mới tải lại tất cả dữ liệu. – juFo

+0

@juFo Chúng chỉ là những gợi ý, bạn sẽ cần nghiên cứu tổng quát hơn về môi trường đa người dùng và tự mình hình dung giải pháp tổng thể tốt nhất, nó sẽ phụ thuộc vào rất nhiều yếu tố. Quan điểm của tôi là nó không phải là một vấn đề của EF. – ChrisBint

+0

Vì vậy, hoàn toàn không có gì trong EF cho bạn biết rằng Ngữ cảnh của bạn đã lỗi thời hoặc cơ sở dữ liệu có dữ liệu mới hơn? – juFo

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