2010-08-09 11 views
11

Trong asp.net (sử dụng MVC, nhưng điều này sẽ xảy ra trong quá thường xuyên)Có thể truy cập hồ sơ mà không cập nhật LastActivityDate không?

Profile.GetProfile(username); 

sẽ cập nhật LastActivityDate cho người dùng đó. Điều này không có ý định khi người khác đang xem tiểu sử của người dùng đó.

Trong lớp thành viên bạn có thể xác định xem có nên cập nhật ngày này với một param thứ hai, như vậy:

Membership.GetUser(username, false); // doesn't update LastActivityDate 
Membership.GetUser(username, true); // updates LastActivityDate 

Liệu có cách nào để làm điều gì đó tương tự như trong các nhà cung cấp hồ sơ mà không cần viết cung cấp dịch vụ của riêng tôi?

Trả lời

9

Bạn có thể sử dụng một giải pháp thay thế xấu bao gồm thay đổi thủ tục được lưu trữ aspnet_Profile_GetProperties. Điều này có trách nhiệm nhận được các thuộc tính trong khi truy cập hồ sơ người dùng.

mở thủ tục này và bạn sẽ tìm thấy đoạn mã sau ở phía dưới:

IF (@@ROWCOUNT > 0) 
BEGIN 
    UPDATE dbo.aspnet_Users 
    SET [email protected] 
    WHERE UserId = @UserId 
END 

Hủy bỏ nó để ngừng cập nhật các LastActivityDate. Bạn sẽ vẫn nhận được LastActivityDate được cập nhật khi gọi số Membership.GetUser(username, true);.

+3

Vâng, chỉnh sửa sproc là những gì tôi đã kết thúc. Tại một thời điểm nào đó, tôi có thể viết lại phần hồ sơ của trang web của mình để tùy chỉnh hoặc sử dụng một bên thứ ba, nhưng tôi cần khắc phục nhanh. – WildJoe

1

Bạn có thể xem xét sử dụng nhà cung cấp mà người khác đã viết, thay vì viết của riêng bạn.

Cái này trên blog của Scott Guthrie bao gồm các thủ tục lưu trữ có thể được gọi trực tiếp bằng mã riêng của bạn để có được những thông tin:

http://weblogs.asp.net/scottgu/archive/2006/01/10/435038.aspx

Trang này có tải msi để cài đặt một ứng dụng mẫu để làm việc với dữ liệu Tiểu sử tùy chỉnh. Bảng dựa trên hồ sơ thực hiện tốt hơn rất nhiều so với mặc định trên, nơi tất cả các dữ liệu hồ sơ được chứa trong một trường cơ sở dữ liệu duy nhất. Bảng dựa trên một cũng dễ dàng hơn rất nhiều để truy vấn trực tiếp, mà sẽ giúp bạn với câu hỏi của bạn. Quy trình được lưu trữ từ lược đồ mẫu được gọi là getCustomProfileData

Nếu không, chỉ cần truy vấn trực tiếp.

+1

Tôi đặc biệt khuyên bạn không nên truy vấn trực tiếp vào cơ sở dữ liệu. Nếu không, bài đăng tuyệt vời. – bzlm

+0

@bzlm Tôi tôn trọng quan điểm chuỗi của bạn và tôi không thể không đồng ý nếu bạn không cho tôi lý do. :) Tôi đã truy vấn cơ sở dữ liệu trong nhiều năm hơn tôi muốn nhớ và havent có quá nhiều khó khăn. –