Tôi bỏ phiếu cho việc đặt nó trong thủ tục (hoặc mặc định cho cột, cho phần chèn). Không có lý do gì để chuyển tất cả thông tin này qua tất cả các lớp trừ khi bạn cần độ chính xác đến micro giây để phân biệt, ví dụ:khi người dùng nhấp vào nút so với khi giao dịch được cam kết trong cơ sở dữ liệu. Điều này đặc biệt đúng nếu bạn có một ứng dụng phân tán - bạn có muốn dựa vào tất cả các máy chủ web / ứng dụng của mình để được đồng bộ hóa, đừng bận tâm đến các máy trạm người dùng cuối cho các ứng dụng máy khách / máy chủ? Bạn có thể có các máy chủ ở các trung tâm dữ liệu khác nhau, tất cả đều có múi giờ khác nhau, một số quan sát DST, một số thì không, v.v. DateTime.UtcNow
nên xóa bỏ hầu hết những khác biệt đó nhưng tôi vẫn quay lại chuyển tất cả dữ liệu đó mà không có lý do gì. Cơ sở dữ liệu biết mấy giờ rồi; hãy để nó lưu trữ giá trị cho bạn và giữ tất cả logic đó khỏi ứng dụng.
(Ngoài ra, nếu bạn đang lưu trữ thời gian UTC, bạn có thực sự cần DATETIMEOFFSET
không ? Nếu vậy, bạn vẫn cần một số cách để thủ tục biết thông tin này đến từ múi giờ nào. Nếu không, bạn có thể chỉ nên sử dụng SMALLDATETIME/DATETIME/DATETIME2
tùy thuộc vào độ chính xác được yêu cầu.)