是否可以将新的Asp.net标识与Database First和EDMX一起使用?还是仅使用代码?
这是我所做的:
1)我创建了一个新的MVC5项目,并让新的Identity在我的数据库中创建了新的User和Roles表。
2)然后,我打开了Database First EDMX文件,并将其拖到新的Identity Users表中,因为我还有其他与此表相关的表。
3)保存EDMX后,数据库优先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
{
}
}
2)我将DataContext更改为从IdentityDBContext继承,而不是从DBContext继承。请注意,每次更新EDMX并重新生成DBContext和Entity类时,都必须将其设置为此。
public partial class MVC5Test_DBEntities : IdentityDbContext<AspNetUser> //DbContext
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; }