2010-01-08 38 views
6

Câu hỏi nhanh Re: Thực hiện RowVersion.SQL Server RowVersion

tôi tìm cách để đưa nó vào trong cơ sở dữ liệu tiếp theo của tôi (Thiết kế nó bây giờ) và tôi đang cân nhắc 2 cách khác nhau:

hàng
  1. rowversion trong tất cả các bảng
  2. Một bảng rowversion riêng biệt trong đó có ID của bảng như một khóa ngoại và liên kết với nó.

Bất cứ ai đã thử điều này? Nếu vậy thì bạn đã trải nghiệm những cạm bẫy hoặc chuyên nghiệp nào?

tôi sẽ sử dụng LINQ để truy cập dữ liệu bằng C# 2008 và SQL Server 2008.

Cảm ơn,

James

Trả lời

11

Nếu bạn đang sử dụng LINQ to SQL sau đó nó là một thực hành tốt để bao gồm cột dấu thời gian/hàng tuần cho mỗi bảng thực thể, vì điều này cho phép LINQ sử dụng đồng thời lạc quan rất dễ dàng và dẫn đến hiệu suất tốt hơn một chút để cập nhật (vì LINQ chỉ phải truy vấn cột dấu thời gian và không phải so sánh các cột khác để thay đổi) .

Vì vậy, hãy chọn tùy chọn đầu tiên. Tùy chọn thứ hai là không khởi động, thực sự.

+0

Như tôi đã nghi ngờ ... Không có điểm nào trong việc phát minh lại bánh xe !! Cảm ơn Sam. – Darbio

1

Giả sử bởi RowVersion, bạn có nghĩa là kiểu dữ liệu dấu thời gian (tên xấu).

Sử dụng cột Rowversion trong tất cả các bảng.

SQLServer cập nhật cột tự động.

Tôi chưa bao giờ sử dụng LINQ to SQL (như SQL nguyên bản của tôi) nhưng cột Rowversion rất hữu ích trong bản cập nhật (đồng thời).

Chỉ cần sử dụng "WHERE ID = @ ID AND ROWVERSION = @ RV" để xử lý các cập nhật đồng thời.

KHÔNG sử dụng tùy chọn thứ hai của bạn!

+1

Kể từ SQL Server 2008, kiểu dữ liệu đó được gọi là "RowVersion" (vì tên TIMESTAMP quá sai lệch và gây nhầm lẫn) –

+2

marc_s: bạn đúng nhưng Management Studio vẫn chưa nhận thức được điều đó. – pkario

2

Thêm hàng tuần của bạn vào bảng chính - đặt nó trong bảng thứ hai và liên kết với nó sẽ làm giảm hiệu suất.

Như Sam đã nói ở trên, LINQ lợi ích khi có hàng ngang trên bàn - nhưng tôi không nghĩ rằng nó sẽ hoạt động với một bảng được nối kết.