是否可以将新的 Asp.net Identity 与 Database First 和 EDMX 一起使用?还是只有代码优先?
这是我所做的:
1)我创建了一个新的 MVC5 项目,并让新的身份在我的数据库中创建新的用户和角色表。
2) 然后我打开我的 Database First EDMX 文件并拖入新的 Identity Users 表,因为我还有其他与之相关的表。
3) 保存 EDMX 后,Database First POCO 生成器将自动创建一个 User 类。但是,UserManager 和 RoleManager 需要一个继承自新 Identity 命名空间 (Microsoft.AspNet.Identity.IUser) 的 User 类,因此使用 POCO User 类将不起作用。
我想一个可能的解决方案是编辑我的 POCO 生成类以让我的用户类从 IUser 继承?
还是 ASP.NET 标识仅与代码优先设计兼容?
++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++
更新:按照安德斯·阿贝尔的建议,这就是我所做的。它有效,但我想知道是否有更优雅的解决方案。
1)我通过在与自动生成的实体相同的命名空间内创建部分类来扩展我的实体用户类。
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)在您自动生成的用户实体类中,您必须将 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; }