如何在继承的空应用程序中使用身份?

How to use Identity in a empty application with inheritance?

我有一个应用程序,我正在尝试使用继承和标识来控制它。

我有一个class人,Client和Chef继承了这个人的特点。

我创建了一个空的 MVC 应用程序,并且想使用 Identity。我上周研究了如何在一个空应用程序中实现身份,并且总是找到创建 MVC 个人帐户并将其用作基础的示例。由此我遇到了太多麻烦,有人可以帮助我吗?

不确定您在此处寻找的确切内容,但 Identity 的工作方式是您创建一个继承自 IdentityUser 的 class 并成为应用程序的用户对象:

public class ApplicationUser : IdentityUser
{
}

您可以使用您希望在应用程序中为用户存储的任何属性来扩展此 class。如果 Client 和 Chef 应该是系统的用户(您可以作为 client/chef 登录),那么他们应该从您的用户实体继承,ApplicationUser 这里。

public class Client : ApplicationUser
{
}

public class Chef : ApplicationUser
{
}

同样,您可以扩展那些 classes,但是您希望根据需要存储额外的信息。但是,请记住,继承层次结构将使用 STI(单 table 继承)进行持久化。换句话说,用户实体的所有属性和该用户实体的所有子classes 都将在同一个table 上。将添加一个鉴别器列以通知 Entity Framework 它应该用每一行的数据实例化什么 class 。实际上,这仅意味着您不能在 subclasses 上拥有不可为 null 的属性。例如,如果 Chef 有一个像 public string CulinarySchool { get; set; } 这样的 属性,你不能在实体上要求它,因为 Client 没有这个 属性,因此无法满足要求。不过,这只会影响您的实体 classes。您仍然可以创建一个视图模型,您需要此 属性 用于表单。

至于你的Peopleclass,就看你想用这个做什么了。 C# 不支持多重继承,因此您唯一的选择是将 People class 替换为 ApplicationUser,基本上只需移动其所有属性,或者您可以使 People ApplicationUser 的子 class,然后让 ClientChef 像现在一样从它继承:

public class People : ApplicationUser
{
}

public class Client : People
{
}

public class Chef : People
{
}

如果实际上不应该有 People 的实例,您可以将其抽象化。

你是说 ASP.NET Identity 吗?这是相当新的。

Cutting Edge - A first look at ASP.NET Identity