1

ASP.NET MVCについては初心者です。Entity Frameworkコードを使用してテーブルに追加のユーザー情報を格納するASP.NET MVC 3最初のアプローチ

サイト、クライアント、サプライヤに登録できるメンバーは2種類あります。

各タイプは、デフォルトメンバークレデンシャル(ユーザー名、電子メール、パスワード)と共に、別のモデル/テーブル(すなわち、クライアントモデル/テーブル、サプライヤーモデル/テーブル)に追加情報が格納されたメンバーになります。これに最善のアプローチがないかどうかはわかりません。推奨事項はありますか?

各タイプごとに個別の登録ページがあり、登録が成功すると、それぞれの役割(クライアント、サプライヤなど)に追加されます。

私がプレイしているクライアントモデルは次のとおりです。クライアント以下

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); 
} 

での登録方法は、これは適切なアプローチですされているため、登録を処理するために、次のように

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; } 
} 

は現在、私はViewModelに作成しましたか?私は、クライアントモデルがMembershipUserを継承することを考えていました。

どのようにすれば、クライアントのページリストをメンバーシップの詳細(ユーザー名と電子メール)とともに作成できますか?

答えて

1

私は2つのユーザーレベルのシステムを開発しました。タイプ固有の情報を格納する最も簡単な方法は、別々のテーブルを用意し、それらに情報のリンク部分を割り当てることです。それを型固有のテーブルにも記録します。彼らの情報を探したがっているときは、ユーザーの顧客IDを確認し、アクセスされるレコードのIDと照合します。

私はあなたの状況を私は、クライアントとサプライヤーモデルの両方に関連IDの列を追加します。アソシエートIDはユーザー名でも構いませんが、asp.netメンバーシップのユーザー名をアソシエートIDにリンクする別のユーザーテーブルを持つことが最善の方法であることがわかりました。次に、両方のテーブルで現在のユーザーがIDを関連付けているかどうかを調べることによって、ユーザーがクライアントかサプライヤーかを簡単に確認できます。このアプローチは、サプライヤまたはクライアントに多数のユーザーアカウントがある場合に、すべて同じデータセットにアクセスできることを意味します。権限の一部を実行するためにASP.Netメンバシップロールを使用することはできますが、レコードをユーザーに表示する前に関連IDを確認する必要があります。

UPDATE 2012年2月5日:

1は、以下のようにだあなたは、あなたのユーザーとクライアントのためのモデルを作成することができます。

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メンバーシップにリンクするユーザーモデル(クライアント/サプライヤの共通のプロパティを含む)を紹介する必要があります。次に、Client/SupplierモデルのKeyおよびForeignKeyとしてUserモデルIDを使用して関連付けを作成します。私は理論を理解するだけで解決策を実装する方法がわからない。クライアントの編集/詳細ページを処理するためにViewModelが必要ですか?.netのメンバーシッププロパティをどのように引き出すことができるかの例はありますか?それはデフォルトのAccountModels/Controllersに似ていますか? –

+0

クライアントとサプライヤの編集/詳細ページを提供する必要があります。これは、メンバーシップとは別のものです。しかし、パスワードを変更するためのフォームを提供することもできます。あなたは 'User.Identity.Name'を使って現在のユーザのユーザ名を得ることができます。 ASP.Netメンバーシップシステムでユーザーのユーザー名を取得するには、ユーザーをメンバーシップで見つけてユーザー名を取得し、メンバー表ではなくユーザーの表に保管する必要があります。 – flumeware

+0

私のユーザモデルとクライアントモデルの見え方の例を教えてください。 –

関連する問題