2013-02-16 2 views
7

Ich schreibe eine MVC-4 C# .net 4.5 WebsiteWebSecurity.CreateUserAndAccount property

Ich möchte ein neues Unternehmen Objekt erstellen und einen neuen Benutzer registrieren, die an das Unternehmen gebunden ist.

Mein Konto Modell ist:

[Table("UserProfile")] 
    public class UserProfile 
    { 
     [Key] 
     [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
     public int UserId { get; set; } 
     public string UserName { get; set; } 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 
     public string EmailAddress { get; set; } 
     public string PhoneNumber { get; set; } 
     public bool MarketingEmailOptin { get; set; } 
     public bool isDisabled { get; set; } 
     public virtual Company CompanyICanEdit { get; set; } 
    } 

Wenn ich die folgende nennen es den Benutzer fein fügt hat aber null für das CompanyICanEdit Feld:

WebSecurity.CreateUserAndAccount(addCompanyViewModel.User.UserName, 
           addCompanyViewModel.User.Password, 
           propertyValues: new 
           { 
            FirstName = addCompanyViewModel.User.FirstName, 
            LastName = addCompanyViewModel.User.LastName, 
            EmailAddress = addCompanyViewModel.User.EmailAddress, 
            PhoneNumber = addCompanyViewModel.User.PhoneNumber, 
            MarketingEmailOptin = addCompanyViewModel.User.MarketingEmailOptin, 
            isDisabled = false 
           }); 

, die ich erwarten würde, wie ich bin nicht zuweisen Es ist alles.

Ich habe versucht, das Hinzufügen (mycompany ist ein Unternehmen, Objekt):

WebSecurity.CreateUserAndAccount(addCompanyViewModel.User.UserName, 
           addCompanyViewModel.User.Password, 
           propertyValues: new 
           { 
            FirstName = addCompanyViewModel.User.FirstName, 
            LastName = addCompanyViewModel.User.LastName, 
            EmailAddress = addCompanyViewModel.User.EmailAddress, 
            PhoneNumber = addCompanyViewModel.User.PhoneNumber, 
            MarketingEmailOptin = addCompanyViewModel.User.MarketingEmailOptin, 
            isDisabled = false, 
            CompanyICanEdit = mycompany 
           }); 

aber ich erhalte eine Fehlermeldung, dass es nicht mit dem Typ übereinstimmen kann.

Wie gehe ich bei der Registrierung des Benutzers vor, so dass der CompanyICanEdit den CompanyId-Wert von Mycompany enthält?

Jede Hilfe wird geschätzt. Danke

Antwort

19

Nie ausgearbeitet, wie man es in 1 geht, bekam es am Ende durch das folgende, wenn jemand das gleiche Problem hat.

// 
// POST: /BusinessManager/ManageCompanies/Add 
[HttpPost] 
public ActionResult Add(AddCompanyViewModel addCompanyViewModel) 
{ 
    if (ModelState.IsValid) 
    { 
     // Create company and attempt to register the user 
     try 
     { 
      WebSecurity.CreateUserAndAccount(addCompanyViewModel.User.UserName, 
               addCompanyViewModel.User.Password, 
               propertyValues: new 
               { 
                FirstName = addCompanyViewModel.User.FirstName, 
                LastName = addCompanyViewModel.User.LastName, 
                EmailAddress = addCompanyViewModel.User.EmailAddress, 
                PhoneNumber = addCompanyViewModel.User.PhoneNumber, 
                MarketingEmailOptin = addCompanyViewModel.User.MarketingEmailOptin, 
                isDisabled = false 
               }); 

      db.Companies.Add(addCompanyViewModel.Company); 

      var newuser = db.UserProfiles.FirstOrDefault(u => u.UserName == addCompanyViewModel.User.UserName); 
      if (newuser != null) 
      { 
       newuser.CompanyICanEdit = addCompanyViewModel.Company; 
       db.Entry(newuser).State = EntityState.Modified; 
       db.SaveChanges(); 
       return RedirectToAction("Index"); 
      } 
      else 
      { 
       ModelState.AddModelError("", "New user wasn't added"); 
      }      
     } 
     catch (MembershipCreateUserException e) 
     { 
      ModelState.AddModelError("", Mywebsite.Controllers.AccountController.ErrorCodeToString(e.StatusCode)); 
     } 

    } 

    return View(addCompanyViewModel); 
} 
+0

Wenn Sie int hinzufügen CompanyICanEditId {get; einstellen; } und [ForeignKey ("CompanyICanEditId")] für die CompanyICanEdit-Eigenschaft, dann können Sie CompanyICanEditId = company.Id den Eigenschaften des erstellten Benutzers hinzufügen – blazkovicz