2013-07-03 29 views
13

cho ETag trong ITableEntity MSDN là gì: Nhận hoặc đặt ETag hiện tại của tổ chức. Đặt giá trị này thành '*' để ghi đè một thực thể một cách mù quáng như là một phần của hoạt động cập nhật.Mục đích của ETag trong ITableEntity

Tôi không thể hạ thấp mục đích của thuộc tính này, vui lòng giải thích lý do và thời điểm chúng tôi có thể sử dụng thuộc tính này.

Trả lời

1

Thuộc tính ETAG là dấu thời gian của thực thể. Bạn có thể đọc các tài sản ETAG trong sự kiện ReadingEnitity.

void OnContextReadingEntity(object sender, ReadingWritingEntityEventArgs e) 
{ 
    string eTag = e.Data.FirstAttribute.Value; 
} 

Để biết thêm chi tiết xin vui lòng xem thảo luận về chủ đề sau How to use Windows Azure Table Storage Timestamp or Etag field

+5

Hiện tại, ETag giữ dấu thời gian. Nhưng bạn không nên dựa vào điều đó. Nó có thể thay đổi trong tương lai. ETag được sử dụng để xử lý đồng thời lạc quan và thường không nên được sử dụng từ mã của bạn. Nếu bạn cần dấu thời gian hơn là sử dụng thuộc tính Dấu thời gian. Để biết thêm thông tin về ETAG, hãy đọc phần Nhận xét trong msdn: http://msdn.microsoft.com/en-us/library/windowsazure/dd179427 – huha

21

ETag không phải là dấu thời gian, hoặc ít nhất là không nữa. Có một thuộc tính Dấu thời gian khác là khi bản ghi được cập nhật lần cuối. ETag được sử dụng cho đồng thời. Nếu bạn tải một thực thể bảng và muốn cập nhật nó, bạn vượt qua để cập nhật ETag từ khi bạn nạp giá trị và nó sẽ cập nhật thực thể chỉ khi ETag đó khớp với những gì được lưu trữ.

Tại sao bạn quan tâm? Vâng, nếu bạn có nhiều người dùng chỉnh sửa cùng một mục trên cùng một biểu mẫu, bạn không muốn một người dùng thay đổi ghi đè người dùng khác mà không có người dùng thứ hai được thông báo rằng họ đang ghi đè dữ liệu đã bị thay đổi kể từ khi tải .

Ví dụ: người dùng 1 và người dùng 2 tải trang chỉnh sửa cùng một lúc. Người dùng 1 thay đổi giá trị cho trường 1 và lưu mục. Sau khi người dùng 2 đã mở mục người dùng lâu hơn một chút 2, hãy thực hiện thay đổi đối với trường không liên quan 2 và vô tình trường đã lỗi thời 1 đang được lưu với bản cập nhật của họ. Người dùng 2 không biết họ đang loại bỏ thay đổi của người dùng 1 trừ khi bạn nói với họ. Vì vậy, những gì bạn nên làm là hiển thị một lỗi mà người dùng 1 đã thay đổi nó và họ có chắc họ muốn ghi đè lên người dùng 1 thay đổi hoặc nếu họ muốn xem những thay đổi đó trước tiên.

Điều này được thực hiện bởi cả người dùng 1 và người dùng 2 lưu trữ ETag từ khi bản ghi được tải ẩn trên màn hình biểu mẫu của bạn. Khi mỗi người dùng cố gắng lưu, bạn có thể chuyển ETag đó tới máy chủ bằng dữ liệu được cập nhật. Làm thế nào để điều này cho bạn biết người dùng 2 đang thay đổi một bản ghi lỗi thời? Bởi vì mọi thay đổi đối với bản ghi sẽ cập nhật ETag được lưu trữ cho bản ghi đó. Vì vậy, khi người dùng 2 cố gắng để lưu các ETag bạn gửi với những thay đổi của họ sẽ không phù hợp và Azure sẽ cho bạn biết để bạn có thể xử lý những gì nên được thực hiện.

Bây giờ nếu bạn không quan tâm người dùng 2 có thể ghi đè lên thay đổi người dùng 1, sau đó vượt qua "*" với lưu và Azure sẽ không đưa ra lỗi khi ETag không khớp.