具有实体框架核心的AspNetUsers到IdentityUser

时间:2019-08-29 07:09:34

标签: c# asp.net asp.net-core asp.net-membership

背景

我有一个使用C#和ASP.NET核心(v2.2)编写的项目。该项目连接到一个数据库,该数据库包含一个名为“ AspNetUsers”的表。构建策略是“数据库优先”。

我正在使用以下命令从数据中构建模型:

Scaffold-DbContext "...DB-CS..." PROVIDER -Context UsersDB -f -OutputDir Processes\Models

然后为我创建了这个映射的类:

public partial class AspNetUsers
{
    public AspNetUsers()
    {

    }
    public string Id { get; set; }
    public DateTime RegistrationTime { get; set; }
    // ...
}

在我的网站上,我使用的是UserManager类。此类希望获得一个从IdentityUser接口继承的Object。

问题:

是否可以使我的AspNetUsers类实现IdentityUser

谢谢!

更新#1

感谢@Darjan Bogdan的回答,我创建了这个新文件:

public partial class AspNetUsers : IdentityUser
{
}

并将我的UserManager更改如下:

private UserManager<AspNetUsers> UserManager { get; set; }

乍看之下,看起来像是工作。当更深入地检查这一点时-我遇到了许多奇怪的错误,例如:

User security stamp cannot be null.

尽管AspNetUsers实例具有 SecuriyStamp字段(不为null)。 我检查了AspNetUsers文件(自动生成),似乎某些属性正在隐藏另一个属性。

enter image description here

问题:我先使用数据库模型。因此,AspNetUsers文件是自动生成的。如何避免隐藏其他属性?

4 个答案:

答案 0 :(得分:1)

您可以轻松做到这一点,这是代码生成器创建partial classes的原因。

因此,为了让AspNetUsers继承IdentityUser,您只需要在另一个(未生成的)文件中定义以下内容,例如 AspnetUsers.Partial.cs 文件:

public partial class AspnetUsers : IdentityUser
{

}

请注意,您不应更改生成的文件,而是创建自己的文件夹,在其中添加带有部分类的其他文件。

值得一提的是,扩展部分类时,您需要使用同一名称空间

答案 1 :(得分:0)

除非您具有自定义数据,否则您确实不需要实现IdentityUser

plt.legend()

在这里Microsoft docs

答案 2 :(得分:0)

是的,这是可能的,这是您应该这样做的正常方法。在这种情况下,请从自动生成的AspNetUser类中删除从IdentityUser继承的属性,并仅保留不继承的属性。

public class AspNetUser : IdentityUser<string> 
{
    public DateTime RegistrationTime { get; set; }
    public string OtherPros {get;set;},
}

然后可以将AspNetUser类与UserManager一起使用。

干杯

答案 3 :(得分:0)

尝试一下

public partial class AspNetUsers : IdentityUser
{
    public AspNetUsers()
    {

    }
    public string Id { get; set; }
    public DateTime RegistrationTime { get; set; }    
}