Настройка CustomMeership CreateUserAndAccount
Я пытаюсь добавить новое свойство в класс UserProfile
в моей модели
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; }
}
Я пытаюсь добавить его к методу seed в моем файле Configurations.cs
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 = "[email protected]" }); \\ this line errors
}
if (!roles.GetRolesForUser("drew").Contains("Administrator"))
{
roles.AddUsersToRoles(new[] { "drew" }, new[] { "Administrator" });
}
}
Однако я получаю сообщение об ошибке:
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
Я привел примеры, например: http://blog.longle.net/2012/09/25/seeding-users-and-roles-with-mvc4-simplemembershipprovider-simpleroleprovider-ef5-codefirst-and-custom-user-properties/
Но я ничего не придумываю... Моя версия WebMatrix.WebData
v4.0.30319
Любые мысли?
Ответы
Ответ 1
Попробуйте вот так:
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 = "[email protected]" },
false
);
}
if (!Roles.GetRolesForUser("drew").Contains("Administrator"))
{
Roles.AddUsersToRoles(new[] { "drew" }, new[] { "Administrator" });
}
}
Здесь nice tutorial
об SimpleMembershipProvider, который вы можете рассмотреть.
Ответ 2
Поскольку последний параметр метод SimpleMembershipProvider.CreateUserAndAccount должен быть IDictionary<string, Object>
, ваш код должен быть переписан следующим образом:
membership.CreateUserAndAccount(
"drew",
"password",
new Dictionary<string, object> { new { "Email", "[email protected]" } }
);