使用EF 6 + MySQL的ASP.NET Identity 2简单用户登录示例

时间:2015-02-17 23:40:36

标签: mysql asp.net asp.net-mvc entity-framework asp.net-identity

我正在使用EF 6和MySQL构建一个相当小的ASP.NET MVC 5应用程序,我认为使用Identity而不是滚动我自己的安全性会很好。我已经好几天了,尝试了我可以谷歌的一切,但我觉得.NET世界在我身边不断扩展。我没有前进。

我只需要登录帐户和我建立的网站部分的安全性。有些页面是订阅者私有的,其他页面是公开的。我希望Identity表与应用程序使用的MySQL数据库相同。

我最后一次尝试这样的事情是ASP.NET 2.0中的FormsAuth / Membership内容 - 而且从那时起我就没有构建任何实质性的东西 - 所以非常初学者带有身份。< / p>

现在这个实验已经取得了进展。我让MySQL通过一系列指南和黑客与EF 6合作,并为Code First方法做到了这一点,并且工作了。表格正在生成,数据正在流动:

[DbConfigurationType(typeof(MySqlEFConfiguration))]
public class RwcDataModel : DbContext
{
    public RwcDataModel()
        : base("name=RwcDataModel")
    {
    }

    public virtual DbSet<User> Users { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    }
}

[Table("user")]
public class User
{
    [Key, Column("id")]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public virtual int Id { get; set; }

    [Column("fullname"), StringLength(45, MinimumLength = 1)]
    public virtual string FullName { get; set; }

    [Column("email"), StringLength(45, MinimumLength = 1)]
    public virtual string Email { get; set; }

    [Column("username"), StringLength(45, MinimumLength = 1)]
    public virtual string Username { get; set; }

    [Column("password"), StringLength(45, MinimumLength = 1)]
    public virtual string Password { get; set; }

    [Column("created"), DataType(DataType.Date)]
    public virtual DateTime Created { get; set; }

    [Column("active")]
    public virtual bool Active { get; set; }
}

//...etc - other tables

public class RwcDbInitializer : DropCreateDatabaseAlways<RwcDataModel>
{
    protected override void Seed(RwcDataModel context)
    {
        context.Users.Add(new User { FullName = "Administrator", Email = "me@gmail.com", Username = "Administrator", Password = "password", Created = DateTime.Now });
        context.Users.Add(new User { FullName = "Some Guy", Email = "someguy@gmail.com", Username = "someguy", Password = "password", Created = DateTime.Now });
        context.SaveChanges();
    }
}

...在Global类的Application_Start()中使用它:

        DbConfiguration.SetConfiguration(new MySqlEFConfiguration());
        Database.SetInitializer<RwcDataModel>(new RwcDbInitializer());

我首先尝试过这个: http://www.codeproject.com/Tips/788357/How-to-set-up-application-using-ASP-NET-Identity-w

...但这只是导致我的数据库被删除,但没有重新创建和播种。奇怪,无法解释。

感谢下面的trailmax,我遵循了这些(类似的)说明:

http://www.asp.net/identity/overview/getting-started/aspnet-identity-using-mysql-storage-with-an-entityframework-mysql-provider

...但是在运行我的应用程序的迭代时,没有创建任何标识表。此外,上面的RwcDataModel什么都不做。数据库没有被删除 - 就像初始化程序被完全忽略一样。

任何想法如何进行?谢谢!

1 个答案:

答案 0 :(得分:0)

查看此博客ASP.NET Identity 2.1 with ASP.NET Web API 2.2 ASP.NET Identity 2.1 with ASP.NET Web API 2.2。 Taiseer Joudeh先生在解释如何将ASP.net Identity 2.1与实体框架结合使用方面做得非常出色。本教程中包含示例代码。虽然教程中没有使用MySQL,但实体框架可以轻松切换到MySQL。希望这可以帮助。欢呼声。