我有一个使用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
?
谢谢!
感谢@Darjan Bogdan的回答,我创建了这个新文件:
public partial class AspNetUsers : IdentityUser
{
}
并将我的UserManager
更改如下:
private UserManager<AspNetUsers> UserManager { get; set; }
乍看之下,看起来像是工作。当更深入地检查这一点时-我遇到了许多奇怪的错误,例如:
User security stamp cannot be null.
尽管AspNetUsers实例具有 SecuriyStamp
字段(不为null)。
我检查了AspNetUsers
文件(自动生成),似乎某些属性正在隐藏另一个属性。
问题:我先使用数据库模型。因此,AspNetUsers文件是自动生成的。如何避免隐藏其他属性?
答案 0 :(得分:1)
您可以轻松做到这一点,这是代码生成器创建partial
classes的原因。
因此,为了让AspNetUsers
继承IdentityUser
,您只需要在另一个(未生成的)文件中定义以下内容,例如 AspnetUsers.Partial.cs 文件:
public partial class AspnetUsers : IdentityUser
{
}
请注意,您不应更改生成的文件,而是创建自己的文件夹,在其中添加带有部分类的其他文件。
值得一提的是,扩展部分类时,您需要使用同一名称空间。
答案 1 :(得分:0)
答案 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; }
}