Asp.net

如何將 Membership API 與自己的應用程序相關數據結合使用?

  • June 30, 2011

在 asp.net 4 中設計一個新應用程序 我必須決定如何使用 MS SQL Membership API 以及我自己在 MS SQL 數據庫中的數據。首先,我需要以比 Profile 提供者支持的更靈活的方式儲存和訪問使用者配置文件數據。其次,我想連結其他使用者相關資訊(例如訂單)。

無論您將 aspnetdb 表儲存在何處(在單獨的數據庫中或與您的數據在同一個數據庫中),問題都在於如何保持數據同步。

經過研究,我看到以下相關選項:

  1. 來自 asp_Users 的外鍵 UserId(教程中建議)。

  2. 無外鍵使用交易(這裡推薦)。

3.無外鍵——使用自定義的AccountController(不管是什麼,這裡建議)。

  1. 將 Membership UserId (uid) 與自定義 UserId (int) 連結的附加表。

一方面,我喜歡第一個解決方案,因為它非常簡單,並且在官方的 asp.net 教程中有所建議。

另一方面,反對者相當合理地指出,使用外鍵打破了提供者的一般概念,提供者應該有助於分離關注點並且可以互換。但不幸的是,他們並沒有過多地討論實施細節,因此很難根據相關性和實施的難易程度來評估這些建議。

那麼解決這個問題的最佳選擇是什麼?此外,實施情況如何?僅使用額外的 ADO.NET 或 LINQ 等程式碼就足夠了嗎,還是值得實現自定義成員資格和/或配置文件提供程序?

先感謝您。

第一種是最簡單的方法。在相關表中添加使用者的 GUID 作為外鍵 (fe Ordered_by)。我看不出它在哪裡打破了分離的關注點。如果您想將訂單記錄保留在數據庫中,您還必須保留已訂購的使用者,這非常有意義。

我在目前的應用程序中成功使用了選項 4。我創建了一個主鍵和 fiUser(的 GUID aspnet_UserID)作為外鍵的表。這是模型:idUser int``aspnet_Users

數據模型

(注意:是通過aspnet_regsql.exeUser創建的標準表,是我的自定義表,它將每個 Guid 映射到我的 int-ID)aspnet_Users``aspnet_UserId

現在我只idUser在所有相關表中儲存我的 as FK(比如在您的訂單表中)。這具有更少儲存空間和更易讀的使用者 ID(我永遠記不起 GUID)的優勢。也許它與這個“包裝表”更加分離,但這不是我的主要意圖。

如果要控制行為,可以更改外鍵的刪除規則。Cascade如果您想刪除您要刪除的使用者訂購的所有訂單,請將其設置為,如果no Action您想保留此訂單,請將其設置為。

我不能為個人資料問題提出任何替代方案,因為您沒有提到“需要以比個人資料提供者支持的更靈活的方式儲存和訪問使用者個人資料數據”的意思。

引用自:https://stackoverflow.com/questions/6532418