相关疑难解决方法(0)

使用EF Database First MVC5的ASP.NET标识

是否可以将新的Asp.net标识与Database First和EDMX一起使用?或者只使用代码?

这是我做的:

1)我创建了一个新的MVC5项目并让新的Identity在我的数据库中创建了新的User和Roles表.

2)然后我打开了我的Database First EDMX文件并拖入了新的Identity Users表,因为我有其他与之相关的表.

3)保存EDMX后,Database First POCO生成器将自动创建User类.但是,UserManager和RoleManager需要从新的Identity命名空间(Microsoft.AspNet.Identity.IUser)继承User类,因此使用POCO User类将不起作用.

我想一个可能的解决方案是编辑我的POCO生成类以使我的User类继承自IUser?

或者ASP.NET Identity仅与Code First Design兼容?

++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++

更新:根据Anders Abel的建议,这就是我所做的.它的工作原理,但我想知道是否有更优雅的解决方案.

1)我通过在与自动生成的实体相同的命名空间中创建一个部分类来扩展我的实体User类.

namespace MVC5.DBFirst.Entity
{
    public partial class AspNetUser : IdentityUser
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

2)我将DataContext更改为继承IdentityDBContext而不是DBContext.请注意,每次更新EDMX并重新生成DBContext和Entity类时,都必须将其设置为此.

 public partial class MVC5Test_DBEntities : IdentityDbContext<AspNetUser>  //DbContext
Run Code Online (Sandbox Code Playgroud)

3)在自动生成的User实体类中,必须将override关键字添加到以下4个字段中,或者将这些字段注释掉,因为它们是从IdentityUser继承的(步骤1).请注意,每次更新EDMX并重新生成DBContext和Entity类时,都必须将其设置为此.

    override public string Id { get; set; }
    override public string UserName { get; set; }
    override public string PasswordHash { get; set; }
    override public string SecurityStamp { get; set; }
Run Code Online (Sandbox Code Playgroud)

asp.net asp.net-mvc ef-database-first asp.net-mvc-5 asp.net-identity

87
推荐指数
4
解决办法
6万
查看次数