2016-07-26 4 views
0

Ich bin ziemlich neu in ASP.NET, speziell für ASP.NET MVC, ich muss den Registrierungsprozess ändern, indem ich das bei einem Benutzer mache erfolgreich registriert, mache ich einen INSERT in andere Tabellen in einer anderen Datenbank mit der Benutzer-E-Mail und dem Benutzernamen. Bislang habe ich noch keinen Weg gefunden, dies spezifisch zu erreichen, da andere Dinge, die ich gefunden habe, das Hinzufügen von Feldern zum Registrieren oder Ändern der Datenvalidierung sind, die ich derzeit nicht benötige.ASP.NET MVC 5 passen Benutzerregistrierung an, um eine Verbindung mit einer anderen Datenbank herzustellen

Ich habe eine Stored Procedure erstellt, die dies auch tut, aber ich weiß nicht, welcher Weg besser ist.

IdentityModel.cs

public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 
    { 
     public ApplicationDbContext() 
      : base("UsersConnection", throwIfV1Schema: false) 
     { 
     } 

     public static ApplicationDbContext Create() 
     { 
      return new ApplicationDbContext(); 
     } 
    } 

    public class ZivoyDbContext : IdentityDbContext<ApplicationUser> 
    { 
     public ZivoyDbContext() 
      : base("DefaultConnection", throwIfV1Schema: false) 
     { 
     } 

     public static ZivoyDbContext Create() 
     { 
      return new ZivoyDbContext(); 
     } 
    } 

und das Konto-Controller

// POST: /Account/Register 
     [HttpPost] 
     [AllowAnonymous] 
     [ValidateAntiForgeryToken] 
     public async Task<ActionResult> Register(RegisterViewModel model) 
     { 
      if (ModelState.IsValid) 
      { 
       var user = new ApplicationUser { UserName = model.Email, Email = model.Email }; 
       var result = await UserManager.CreateAsync(user, model.Password); 
       if (result.Succeeded) 
       { 
        await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false); 

        //Insert into another table 
        ZivoyDbContext.Users.Add(); 

        // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771 
        // Send an email with this link 
        // string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id); 
        // var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme); 
        // await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>"); 

        return RedirectToAction("Index", "Home"); 
       } 
       AddErrors(result); 
      } 

      // If we got this far, something failed, redisplay form 
      return View(model); 
     } 

Ich weiß nicht einmal, wie dies zu tun, bitte jemand könnte mir erklären, wie das funktioniert? Ich habe nach MVC 5 gesucht, das mit SQL Server verbindet, aber fast alle Antworten entsprechen einem einzelnen Controller, der eine einzelne Verbindung verwendet oder ADO.NET verwendet.

+0

Was ist Ihre eigentliche Frage? Was funktioniert nicht? – Rik

+0

@Rik Ich weiß nicht, wie man eine Einfügung mit Benutzerdaten in eine andere Tabelle auf einer anderen Datenbank macht, der Code, den ich versuchte, tut nichts, ich habe etwas versucht, das ich an einem anderen Beispiel sah. Wo soll ich den INSERT INTO ... Teil machen? –

+0

Überprüfen Sie dieses Tutorial - ich denke, es ist EF6 - zu sehen, ob es Ihnen hilft, Ihre Daten hinzugefügt: http://www.entityframeworktutorial.net/EntityFramework4.3/add-entity-using-dbcontext.aspx – EtherDragon

Antwort

0

Ich denke, das Problem ist, dass Sie versuchen, einen Benutzer über den ZivoyDbContext hinzufügen, aber nicht die Benutzerdaten in die Methode übergeben.

Solange die ZivoyDbContext Datenbank und die Tabellen erstellt wurden, einen Anruf ähnlich wie diese verwenden:

// Create a new User object using (all of the required) properties of the 
// new User you have just created via the Register method 
ZivoyDbContext.Users.Add(new ApplicationUser 
       { 
        UserName = user.UserName, 
        PasswordHash = user.Password, 
        Email = user.Email 
       } 
); 

Nicht zu vergessen Savechanges(), wenn nicht automatisch in Ihrem Kontext getan ...

Denken Sie daran, dass der IdentityDbContext viel hat, was Ihr gewöhnlicher EF-Kontext nicht hätte. Ihr Kontext würde wahrscheinlich die Methoden Hinzufügen, Aktualisieren, Löschen, Suchen usw. enthalten, um die Datenbank auf dem neuesten Stand zu halten. IdentityDbContext hat eine ganze Menge Zeug für die Verwaltung von Benutzern und deren Logins - Ihre andere Datenbank wird dies wahrscheinlich nicht benötigen, wenn Sie nur eine Kopie der Benutzer dort speichern möchten. Wenn Sie Ihren Kontext von IdentityDbContext erben, ist das ein wenig übertrieben, wenn Sie nicht alle diese Funktionen verwenden.

+0

Das hat es endlich geschafft, danke –

Verwandte Themen