2011-03-21 44 views
1

我有自動添加的默認成員關係表,然後只是使用服務器資源管理器添加更多的列,如FirstName,LastName等。在我的代碼中,我可以訪問所有的默認列,但不是我的創建。我需要做什麼特別的事情?將列添加到成員資格表。但無法訪問它們? ASP.NET C#

這是我如何訪問表。使用用戶。給我所有的專欄,但是我創造的專欄。

string userName = User.Identity.Name; 


    MembershipUser user = (MembershipUser)System.Web.Security.Membership.GetUser(userName).ProviderUserKey; 

回答

2

您無法這樣做的原因是因爲MembershipUser不公開這些屬性。爲了做到這一點,你將不得不擴展這個類,這將是很多工作。另外,我不建議修改現有的會員表。

你有兩個選擇:

1:使用內置asp.net的配置文件作爲德里克·比蒂提及。 或

2:創建一個單獨的表來存儲其他用戶詳細信息。這裏是你如何做到這一點:

Store-Additional Information

Custom Table

在情況下,如果你想在這裏走冤枉路是how to extend existing membership API

+0

爲什麼你會建議不修改現有的會員表?我可以理解爲什麼不想改變/打破他們現有的專欄,但我真的沒有看到任何傷害,只是添加到他們。保持相同的結構,添加一些列。我無法想象任何問題.. – user3308043 2014-05-23 00:13:00

+1

@ user3308043是的,如果你喜歡,你可以添加一個列,但這些列將不能直接使用,因爲你將不得不修改存儲過程/和相應的類。另一個原因是微軟更改會員供應商,就像他們最近使用身份提供商一樣。現在說如果你想遷移到這個新的提供者,如果你有默認模式,你將需要做額外的工作。 「不推薦」主要來自MS以及那些不太瞭解副作用的人。所以這又是一個灰色地帶。 – gbs 2014-05-27 16:45:14

+0

我同意你所說的一切,但我從原始數據訪問的角度來看待這個問題。如果你只是想添加到該表,你可以。肯定遷移可能會很艱難。當然,sprocs不會一樣。但是,如果您想在添加列之後針對添加的列向「用戶」或「成員資格」表中添加專門的SQL查詢,那麼您就很好。 – user3308043 2014-05-27 19:00:28

0

添加名爲 「名字」 的新列:

下面的代碼添加到 「ApplicationUser」 類型號/ IdentityModels.cs:

public string FirstName { get; set; } 

第1步

第2步: Models/AccountViewModels.cs

下面的代碼添加到 「RegisterViewModel」 級:

public string FirstName { get; set; } 

步驟3:查看/ Register.cshtml

姓輸入文本框添加到視圖:

<div class="form-group"> 
     @Html.LabelFor(m => m.FirstName, new { @class = "col-md-2 control-label" }) 
     <div class="col-md-10"> 
      @Html.TextBoxFor(m => m.FirstName, new { @class = "form-control" }) 
     </div> 
</div> 

第4步:

轉到工具> NuGet Manager> Pac卡格Manager控制檯

步驟A:輸入「啓用的遷移」,然後按回車
步驟B:輸入「Add-遷移‘姓’」,然後按回車
步驟C:輸入「更新-數據庫」,然後按回車

i。Ë

PM> Enable-Migrations 
    PM> Add-Migration "FirstName" 
    PM> Update-Database 

步驟5:控制器/ AccountController.cs

去註冊行動,並添加 「名字= model.FirstName」 到ApplicationUser 即

var user = new ApplicationUser { UserName = model.Email, Email = model.Email, FirstName = model.FirstName}