为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

翻翻过去那场雪 2019-08-30 17:57:32
是否可以将新的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    {    }}2)我将DataContext更改为继承IdentityDBContext而不是DBContext。请注意,每次更新EDMX并重新生成DBContext和Entity类时,都必须将其设置为此。 public partial class MVC5Test_DBEntities : IdentityDbContext<AspNetUser>  //DbContext3)在自动生成的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; }
查看完整描述

3 回答

?
慕的地8271018

TA贡献1796条经验 获得超4个赞

应该可以将身份系统与POCO和Database First一起使用,但您必须进行一些调整:


更新.tt文件以生成POCO以生成实体类partial。这将使您可以在单独的文件中提供其他实现。

User在另一个文件中部分实现该类

 


partial User : IUser

{

}

这将使User类实现正确的接口,而不会触及实际生成的文件(编辑生成的文件总是一个坏主意)。


查看完整回答
反对 回复 2019-08-30
?
梦里花落0921

TA贡献1772条经验 获得超6个赞

我的步骤非常相似,但我想分享。


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" />

使用此连接字符串:


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

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


查看完整回答
反对 回复 2019-08-30
  • 3 回答
  • 0 关注
  • 588 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信