我很難包裝我的頭如何使用MVC中的會員資格。我知道有內置的ASPNETDB數據庫,其中包含用戶等所有基本表。但是如果我想在我的一個自定義表和這個內置的用戶表之間添加一個關係呢?如何將關係添加到MVC中的aspnetdb數據庫?
如果我有一個包含博客評論的數據庫表,我們將其稱爲評論。每個評論有一個用戶ID與它關聯,我可以做些什麼?
User.Comments.Add(someCommentObj)
任何人都知道這個好文章嗎?這甚至有可能嗎?
感謝
我很難包裝我的頭如何使用MVC中的會員資格。我知道有內置的ASPNETDB數據庫,其中包含用戶等所有基本表。但是如果我想在我的一個自定義表和這個內置的用戶表之間添加一個關係呢?如何將關係添加到MVC中的aspnetdb數據庫?
如果我有一個包含博客評論的數據庫表,我們將其稱爲評論。每個評論有一個用戶ID與它關聯,我可以做些什麼?
User.Comments.Add(someCommentObj)
任何人都知道這個好文章嗎?這甚至有可能嗎?
感謝
看一看在這個的MembershipProvider廣泛的文章:
http://www.4guysfromrolla.com/articles/120705-1.aspx
看6部分和第7,你可能會想實現一個自定義ProfileProvider並存儲在註釋中引用配置文件。
部分6 - 利用 資料系統捕獲額外的用戶特定信息。瞭解內置的SqlProfileProvider 。
第7 - 的成員,角色,以及檔案系統使用 提供者模型,它允許 所有構建他們的實現是高度
如果你想使用自己的自定義成員資格表格,那麼你需要建立你自己的MembershipProvider。馬特Wrock有walkthrough:
你會發現默認AccountModel讓你注入自己的供應商:
public AccountMembershipService(MembershipProvider provider)
{
_provider = provider ?? Membership.Provider;
}
Nerdinner有dependency injection一個例子,你可能會發現有用:
警告以下是兩種可行的解決方案。第一個很容易。第二個,我認爲你是在追求什麼,但要把它看作是值得的。確保你意識到自己在做什麼,因爲這會獲取成員資格提供者數據並直接訪問它,如果你不小心(如刪除數據),可能會導致一些隱藏的炸彈。
成員數據僅用於身份驗證;授權角色;用戶專用數據的配置文件(如時區或最喜歡的顏色。
解決方案一
如果你想添加在當前用戶下(或任何用戶),你可以做一個評論:
var comment = new Comment(....);
comment.userId = User.Identity.Name; //for user name
或
comment.userId = new Guid(Membership.GetUser().ProviderUserKey); //for guid in table
這eays的方式,你永遠不會直接訪問ASPNET表,你只需使用它的信息。
解決方案二
我假設你使用L2S和VS.設計師
通過將成員表添加到您的L2S設計中,您將可以訪問其數據。對於某些快速查詢(如日期,鎖定信息等),這可能更可取,因爲您不必使用內置的sprocs,這些sprocs有一些嚴重的過度銷燬和繁重的代碼)。如果您在數據庫或L2S設計器中創建了關係,則您可以建立一種關係,您可以像訪問您的問題那樣訪問該關係。
此時,設計師已經爲評論和用戶創建了類。如果您對剛剛創建的實際用戶表執行任何操作,那麼您將繞開會員提供商的設計 - 除非您現在正在執行此操作,否則請勿這樣做。當您向用戶添加評論時,它會將評論添加到評論表中並保持正確的關係。
您現在應該能夠做到:
var user = MyUser.GetById(userId);
user.Comments.Add(comment);
記住,在這種情況下,用戶是當你做
var user = Membership.GetUser(userId);
如果我使用LINQ到實體則這些關係不同於自動創建? – hanesjw 2010-02-02 01:32:46
我不確定是否有全自動的方式。搜索「linq to entities profileprovider」。例如:http://www.codeproject.com/KB/aspnet/LINQCustomProfileProvider.aspx – Zyphrax 2010-02-02 14:12:08