gpt4 book ai didi

ASP.NET 身份与 EF 数据库优先 MVC5

转载 作者:行者123 更新时间:2023-12-02 01:42:45 25 4
gpt4 key购买 nike

是否可以将新的 Asp.net Identity 与 Database First 和 EDMX 结合使用?还是只先使用代码?

这就是我所做的:

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

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

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

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

或者 ASP.NET Identity 仅与代码优先设计兼容?

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

更新:按照下面 Anders Abel 的建议,这就是我所做的。它有效,但我想知道是否有更优雅的解决方案。

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

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

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

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

3) 在自动生成的 User 实体类中,您必须将 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; }

最佳答案

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

  1. 更新 POCO 生成的 .tt 文件,使实体类部分。这将使您可以在单独的文件中提供额外的实现。
  2. 在另一个文件中部分实现 User

 

partial User : IUser
{
}

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

关于ASP.NET 身份与 EF 数据库优先 MVC5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19940014/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com