0

私は、より多くの情報を保持するためにユーザー アカウントの足場を変更しようとしている asp mvc 3 noob です。ユーザーがアカウントを作成するときに、ユーザー名/パスワードだけでなく、氏名や開始日などの追加情報を追加したいと考えています。この追加情報を DB の Employees テーブルに保存します。

ユーザーがフォームに入力した後にアカウントを作成する AccountController のコード行が表示されます。

Membership.CreateUser(model.UserName, model.Password, model.Email, Nothing, Nothing, True, Nothing, createStatus)

この行は、SQL サーバーのストアド プロシージャを呼び出しているようです。最も可能性の高いストアド プロシージャは aspnet_Membership_CreateUser のようです。しかし、このストアド プロシージャには 13 個のパラメーターがあり、上記のコードは 8 個のパラメーターを渡します。

  1. 上記の VB コード (membership.createuser...) によって呼び出されるストアド プロシージャは何ですか?
  2. aspnet_Membership_CreateUser と Membership.CreateUser に同じ数のパラメーターがないのはなぜですか?
  3. ユーザー作成コード/ストアド プロシージャを変更して、登録フォームの情報に基づいて従業員情報を EmployeeTable に追加し、ユーザー アカウントと従業員レコードの間にリンクを追加するにはどうすればよいですか? 一般に、従業員情報を追加パラメーターとしてストアド プロシージャに追加し、ストアド プロシージャに ID の挿入/追加を行わせるという考えですが、正確にはどこでこれを行う必要がありますか?
4

2 に答える 2

0

他の質問に答えることはできませんが、ユーザー登録を拡張してより多くの日付を含めるために使用するコードを次に示します(プロファイルプロバイダーではなく、プロファイルテーブルを使用)。

'
' POST: /Account/Register

<HttpPost()> _
Public Function Register(ByVal model As RegisterModel) As ActionResult
    If ModelState.IsValid Then
        ' Attempt to register the user
        Dim createStatus As MembershipCreateStatus
        Dim MembershipUser = Membership.CreateUser(model.UserName, model.Password, model.Email, Nothing, Nothing, True, Nothing, createStatus)

        If createStatus = MembershipCreateStatus.Success Then

            Dim providerKeyObject = MembershipUser.ProviderUserKey
            Dim providerKeyGuid = MembershipUser.ProviderUserKey

            ' update profile entity
            Dim db As UserProfileDbContext = New UserProfileDbContext
            Dim profile As New UserProfile
            profile.UserId = providerKeyGuid
            profile.IsCompanyOwner = True
            profile.CompanyId = model.Company
            profile.BlogId = model.Blog
            profile.IsCompanyOwner = model.IsCompanyOwner
            profile.IsBlogOwner = model.IsBlogOwner

            db.UserProfiles.Add(profile)
            db.SaveChanges()

            FormsAuthentication.SetAuthCookie(model.UserName, False)

            ' send email
            ' TODO: fix error on send
            Call New EmailController().VerificationEmail(model).Deliver()

            Return RedirectToAction("Index", "Home")

        Else

            ModelState.AddModelError("", ErrorCodeToString(createStatus))

        End If
    End If

    ' If we got this far, something failed, redisplay form
    Return View(model)
End Function
于 2012-08-20T13:26:05.820 に答える
0
  1. コードはaspnet_Membership_CreateUserストアド プロシージャを実行します。

  2. Membership.CreateUserオーバーロードされており、提供されていないパラメータのデフォルト値が設定されます。たとえば、ユーザー名とパスワードのみを使用して CreateUser を呼び出すと、他のすべてのパラメータがデフォルトに設定されます。たとえば、IsApproved は true になります。>>CreateUser と入力すると、オーバーロード オプションが表示されます。Just Decompileのようなツールを使用して、「C:\Windows\Microsoft.NET\Framework\v4.0.30319\system.web.dll」のコードを確認できます。

  3. 追加データを保存するには、さまざまな方法があります。これを見てください。私は UserId/Email アドレスでテーブルをリンクすることを好み、ユーザーを作成するときに CreateUser を呼び出し、成功した場合は追加データを保存します (これは、そのチュートリアルで説明されている方法のわずかなバリエーションです)。メンバーシップ プロバイダー全体を変更/拡張することもできます。このリンク (メンバーシップ プロバイダーの実装)またはこのビデオ チュートリアルを参照してください。

于 2012-08-20T13:47:40.523 に答える