1

我是一個新手,當涉及到ASP.NET MVC表的其他用戶信息,所以這將是巨大的,如果任何人都可以提供指導與以下情形。ASP.NET MVC 3存儲使用實體框架代碼優先的方法

在一個場景中,從而將有兩種類型的會員可以到網站,客戶和供應商登記的Loooking。

每種類型將與附加信息的部件被存儲在單獨的模型/表(即客戶機模型/表,供應商的模型/表),採用默認構件憑證(用戶名,電子郵件,密碼)沿。不確定這是最好的方法。任何建議歡迎?

將有每一種類型,從而在成功註冊它們將被添加到它們各自的角色(即客戶端,供應商)一個單獨的寄存器頁。

這是我玩的客戶端模型。

public class Client 
{ 
    // Will set this manually when creating a Client member 
    [DatabaseGenerated(DatabaseGeneratedOption.None)] 
    public int ClientId { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

目前,我已經創建了一個視圖模型如下辦理登記的客戶

public class RegisterClient 
{ 
    // Default ASP.NET MVC RegisterModel 
    public RegisterModel RegisterModel { get; set; } 
    public Client Client { get; set; } 
} 

以下是在ClientController

public ActionResult Register() 
{ 
    return View(); 
} 

[HttpPost] 
public ActionResult Register(RegisterClient model) 
{ 
    if (ModelState.IsValid) 
    { 
    // Attempt to register the user 
    MembershipCreateStatus createStatus; 
    Membership.CreateUser(model.RegisterModel.UserName, model.RegisterModel.Password, model.RegisterModel.Email, null, null, true, null, out createStatus); 

    if (createStatus == MembershipCreateStatus.Success) 
    { 
     FormsAuthentication.SetAuthCookie(model.RegisterModel.UserName, false /* createPersistentCookie */); 
     Roles.AddUserToRole(model.RegisterModel.UserName, "Client"); 
     // Get UserId for Client <-> User relationship 
     int id = int.Parse(Membership.GetUser(model.RegisterModel.UserName).ProviderUserKey.ToString()); 
     model.Client.UserProfileId = id; 
     db.Clients.Add(model.Client); 
     db.SaveChanges(); 
     return RedirectToAction("Index", "Home"); 
    } 
    else 
    { 
     ModelState.AddModelError("", createStatus.ToString()); 
    } 
    } 
    // If we got this far, something failed, redisplay form 
    return View(model); 
} 

的註冊方法,這是一個合適的方法?我正在考慮讓客戶端模型繼承MembershipUser。

我怎麼能那麼其會員的詳細信息(即用戶名和電子郵件)沿創建客戶端的網頁列表?

回答

1

我開發了一個具有兩級用戶的系統,存儲類型特定信息的最簡單方法是分開表格,然後爲它們分配一個鏈接信息,過去我爲所有用戶分配了一個客戶ID和然後將其記錄在類型特定的表格中。當我想查找他們的信息時,我會檢查用戶的客戶ID,然後根據要訪問的記錄的ID進行檢查。

我你的情況我會添加一個associate id列到客戶端和供應商模型。關聯ID可能是用戶名,但我發現最好的辦法是有一個單獨的用戶表,它將用戶名在asp.net成員資格中鏈接到關聯ID。然後,您可以通過在兩個表中查找當前用戶關聯標識來輕鬆檢查用戶是客戶還是供應商。這種方法意味着後者如果您的供應商或客戶有許多用戶帳戶,他們都可以訪問同一組數據。您仍然可以使用ASP.Net成員身份角色執行部分授權,但在向用戶顯示記錄之前,您應該檢查相關ID。

更新02/05/2012:

就像一個人的下方你可以爲您的用戶和客戶端的機型。

public class User 
{ 
    public int UserId{ get; set; } 
    //This is from ASP.Net Membership 
    public string Username { get; set; } 
    public int AssosiateId { get; set; } 
} 

public class Client 
{ 
    [DatabaseGenerated(DatabaseGeneratedOption.None)] 
    public int ClientId { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 

    //This is the ID of the Assosiate - the same as the user's assosiate id 
    public int AssosiateId { get; set; } 
} 

您將爲供應商創建一個類似於上面客戶端的類。

+0

所以我應該看看引入一個與.net成員資格(包括客戶/供應商的公共屬性)相關聯的用戶模型。然後使用用戶模型ID作爲客戶端/供應商模型中的Key和ForeignKey創建關聯。我理解這個理論只是不確定如何實施解決方案。我需要一個ViewModel來處理客戶端的Edit/Details頁面嗎?我可以如何拉入.net會員資格屬性的任何例子?它會類似於默認的AccountModels/Controllers嗎? – 2012-04-26 12:57:18

+0

您應該爲客戶和供應商提供編輯/詳細信息頁面,這與成員資格是分開的。但它也可以提供更改密碼的表單。您可以使用'User.Identity.Name'獲取當前用戶的用戶名。要獲取ASP.Net成員系統中用戶的用戶名,需要在成員中找到用戶,然後獲取用戶名並將其存儲在用戶表中,而不是成員資格表。 – flumeware 2012-04-26 16:35:17

+0

您能否提供我的用戶模型和客戶端模型應該如何顯示的示例? – 2012-05-02 15:53:09

相關問題