问题
I am trying to add a new property to the UserProfile
class in my model
public class UserProfile
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string UserName { get; set; }
[Required]
[DataType(DataType.EmailAddress)]
[Display(Name = "Email Address")]
public string Email { get; set; } \\this is the new property
public virtual IList<Game> Games { get; set; }
}
I am trying to add it to my seed method in my Configurations.cs
file
private void SeedMembership()
{
WebSecurity.InitializeDatabaseConnection("MafiaContext",
"UserProfile", "UserId", "UserName", autoCreateTables: true);
var roles = (SimpleRoleProvider)Roles.Provider;
var membership = (SimpleMembershipProvider)Membership.Provider;
if (!roles.RoleExists("Administrator"))
{
roles.CreateRole("Administrator");
}
if (membership.GetUser("drew", false) == null)
{
membership.CreateUserAndAccount(
"drew",
"password", false,
new { Email = "myemail@gmail.com" }); \\ this line errors
}
if (!roles.GetRolesForUser("drew").Contains("Administrator"))
{
roles.AddUsersToRoles(new[] { "drew" }, new[] { "Administrator" });
}
}
However, I receive an error:
Error 2 Argument 4: cannot convert from 'AnonymousType#1' to 'System.Collections.Generic.IDictionary<string,object>' C:\Code\Mafia\Mafia.EF\Migrations\Configuration.cs 65 21 Mafia.EF
I have followed examples, such as: http://blog.longle.net/2012/09/25/seeding-users-and-roles-with-mvc4-simplemembershipprovider-simpleroleprovider-ef5-codefirst-and-custom-user-properties/
But I'm coming up with nothing... My WebMatrix.WebData
version is v4.0.30319
Any thoughts?
回答1:
Try like this:
private void SeedMembership()
{
WebSecurity.InitializeDatabaseConnection(
"MafiaContext",
"UserProfile",
"UserId",
"UserName",
autoCreateTables: true
);
if (!Roles.RoleExists("Administrator"))
{
Roles.CreateRole("Administrator");
}
if (!WebSecurity.UserExists("drew"))
{
WebSecurity.CreateUserAndAccount(
"drew",
"password",
new { Email = "myemail@gmail.com" },
false
);
}
if (!Roles.GetRolesForUser("drew").Contains("Administrator"))
{
Roles.AddUsersToRoles(new[] { "drew" }, new[] { "Administrator" });
}
}
Here's a nice tutorial about the SimpleMembershipProvider you might consider going through.
回答2:
Since last parameter of SimpleMembershipProvider.CreateUserAndAccount method should be IDictionary<string, Object>
your code should be rewritten as follows:
membership.CreateUserAndAccount(
"drew",
"password",
new Dictionary<string, object> { new { "Email", "myemail@gmail.com" } }
);
来源:https://stackoverflow.com/questions/14542257/simplememership-createuserandaccount-customization