2013-05-11 2 views
0

Я пытаюсь засеять некоторых пользователей SimpleMembershipProvider. Я добавил несколько столбцов в таблицу UserProfile, например, номер мобильного телефона. Когда я пытаюсь добавить пользователя с номером мобильного телефона, компилятор говорит мне:Поселение пользователей провайдером членства

The name 'Mobile' does not exist in the current context 

Это класс:

namespace _DataContext.Migrations { 
    using System; 
    using System.Data.Entity; 
    using System.Data.Entity.Migrations; 
    using System.Linq; 
    using WebMatrix.WebData; 
    using System.Web.Security; 

internal sealed class Configuration : DbMigrationsConfiguration<_DataContext.DataContext> 
{ 
    public Configuration() 
    { 
     AutomaticMigrationsEnabled = true; 
    } 

    protected override void Seed(_DataContext.DataContext context) 
    { 
     // This method will be called after migrating to the latest version. 

     // You can use the DbSet<T>.AddOrUpdate() helper extension method 
     // to avoid creating duplicate seed data. E.g. 
     // 
     // context.People.AddOrUpdate(
     //  p => p.FullName, 
     //  new Person { FullName = "Andrew Peters" }, 
     //  new Person { FullName = "Brice Lambson" }, 
     //  new Person { FullName = "Rowan Miller" } 
     // ); 
     // 

     SeedMembership(); 
    } 

    private void SeedMembership() 
    { 
     WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true); 


     var roles = (SimpleRoleProvider)Roles.Provider; 
      var membership = (SimpleMembershipProvider)System.Web.Security.Membership.Provider; 

      if (!roles.RoleExists("Administrator")) 
       roles.CreateRole("Administrator"); 

      if (membership.GetUser("Username", false) == null) 
       membership.CreateUserAndAccount("Username", "Pass", false, 
        new Dictionary<string, object> 
        { 
         { Mobile = "+311122334455" }, 
        }); 

      /*if (!WebSecurity.UserExists("test")) 
       WebSecurity.CreateUserAndAccount(
        "Username", 
        "password", 
        new { 
          Mobile = "+311122334455", 
          FirstName = "test", 
          LastName = "test", 
          LoginCount = 0, 
          IsActive = true, 
         }); 
       */ 
    } 
    } 
} 

Если я использую WebSecurity все идет хорошо.

Что я здесь делаю неправильно?

ответ

1

Это именно так, как вы создаете ваш Dictionary, вы не можете сделать:

membership.CreateUserAndAccount("Username", "Pass", false, 
    new Dictionary<string, object> 
    { 
     { Mobile = "+311122334455" }, // Mobile won't compile here 
    }); 

так что вместо этого использовать:

membership.CreateUserAndAccount("Username", "Pass", false, 
    new Dictionary<string, object> 
    { 
     { "Mobile", "+311122334455" }, // Mobile should be the string in the string, object pair 
    }); 

Для чего это стоит, WebSecurity делает точно так же, как вы делаете, но перестает вам указывать точный провайдер в вашем коде.

+0

Привет, имею в виду, думаю, я тоже пробовал этот вариант, но не уверен. Но что вы имеете в виду, когда websecurity останавливает меня от указания точного провайдера? – Yustme

+0

@Yustme. Он просто абстрагирует вас от конкретной реализации поставщика. Его код также принимает «Membership.Provider», но передает его в общий базовый класс для всех поставщиков вместо «SimpleMembershipProvider» (так что потенциально лучше для IoC и/или DI). Если вас не волнует производительность, я бы использовал WebSecurity. –

+0

Хорошо, спасибо! – Yustme

Смежные вопросы