提问者:小点点

带有EF数据库的ASP.NET标识第一MVC5


是否可以将新的ASP.NET标识与数据库优先和EDMX一起使用?还是只先用代码?

以下是我所做的:

1)我制作了一个新的MVC5项目,并让新的标识在我的数据库中创建了新的用户和角色表。

2)然后我打开我的数据库的第一个EDMX文件,并拖入新的Identity Users表,因为我有其他表与它相关。

3)在保存EDMX时,数据库第一个POCO生成器将自动创建一个用户类。但是,UserManager和RoleManager需要一个从新标识命名空间(Microsoft.aspnet.Identity.IUser)继承的用户类,因此使用POCO用户类无法工作。

我想一个可能的解决方案是编辑我的POCO生成类,使我的用户类继承自iUser?

或者ASP.NET标识只与代码优先设计兼容?

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

更新:遵循安德斯·阿贝尔下面的建议,这就是我所做的。它是有效的,但我想知道是否有更好的解决方案。

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

namespace MVC5.DBFirst.Entity
{
    public partial class AspNetUser : IdentityUser
    {
    }
}

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

 public partial class MVC5Test_DBEntities : IdentityDbContext<AspNetUser>  //DbContext

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

    override public string Id { get; set; }
    override public string UserName { get; set; }
    override public string PasswordHash { get; set; }
    override public string SecurityStamp { get; set; }

共3个答案

匿名用户

应该可以首先将身份系统与POCO和数据库一起使用,但是您必须进行一些调整:

  1. 更新生成POCO的。tt-文件,使实体类。这样您就可以在单独的文件中提供其他实现。/li>
  2. 在另一个文件中创建类的部分实现/li>

 ;

partial User : IUser
{
}

这将使类实现正确的接口,而不会触及实际生成的文件(编辑生成的文件总是一个糟糕的想法)。

匿名用户

我的脚步很相似,但我想分享。

1)创建新的MVC5项目

2)创建一个新的model.edmx,即使它是一个新的数据库并且没有表。

3)编辑web.config并替换生成的ConnectionString:

<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-SSFInventory-20140521115734.mdf;Initial Catalog=aspnet-SSFInventory-20140521115734;Integrated Security=True" providerName="System.Data.SqlClient" />

使用此ConnectionString:

<add name="DefaultConnection" connectionString="Data Source=.\SQLExpress;database=SSFInventory;integrated security=true;" providerName="System.Data.SqlClient" />

然后,构建并运行应用程序。注册一个用户,然后将创建表。

匿名用户

编辑:MVC5 CodePlex项目模板首先使用EF数据库的ASP.NET标识。

我希望使用现有的数据库并创建与ApplicationUser的关系。这就是我如何使用SQL Server实现的,但同样的想法可能也适用于任何DB。

  1. 将脚本表插入SQL Server Management Studio中的现有数据库。/li>
  2. 自定义并向ApplicationUser添加关系(如有必要)。/li> ;MVC(>);DB First Project(>);导入数据库与EF.。。不包括您插入的身份类。
  3. 以使用项目的DbContext。