WebSecurity.CreateUserAndAccount propertyValues
asp.net-mvc-4, c#, entity-framework-5
Solution
Never worked out how to do it in 1 go, got round it by the following in the end if anyone has the same problem.
//
// 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);
}
Problem
I'm writing an mvc 4 c# .net 4.5 website I want to create a new company object and register a new user that is linked to that company. My account model is: ``` [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; } } ``` If i call the following it adds the user fine but has null for the CompanyICanEdit field: ``` 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 }); ``` which i would expect as i am not assigning it anything. i have tried adding (mycompany is a company object): ``` 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 }); ``` But i get an error saying it can't match the type. How do i go about registering the user so that the CompanyICanEdit contains the CompanyId value of mycompany? Any help will be appreciated. thanks