什么是ASP.NET迁移中的“鉴别器”列?

奥列克西

我需要在ASP.NET MVC 5中的角色标识表中添加一个额外的字段。

我使用迁移。

我为角色添加了扩展:

public class ApplicationRole : IdentityRole
{
    public ApplicationRole() : base() { }

    public ApplicationRole(string name)
        : base(name)
    {
    }

    public virtual Project Project { get; set; }
}   

我正在上的迁移课程是:

public partial class ProjectToIdentity : DbMigration
{
    public override void Up()
    {
        CreateTable(
            "dbo.Projects",
            c => new
                {
                    ID = c.Int(nullable: false, identity: true),
                    ProjectName = c.String(maxLength: 100),
                })
            .PrimaryKey(t => t.ID);

        AddColumn("dbo.AspNetRoles", "Discriminator", c => c.String(nullable: false, maxLength: 128));
        AddColumn("dbo.AspNetRoles", "Project_ID", c => c.Int());
        CreateIndex("dbo.AspNetRoles", "Project_ID");
        AddForeignKey("dbo.AspNetRoles", "Project_ID", "dbo.Projects", "ID");
    }

    public override void Down()
    {
        DropForeignKey("dbo.AspNetRoles", "Project_ID", "dbo.Projects");
        DropIndex("dbo.AspNetRoles", new[] { "Project_ID" });
        DropColumn("dbo.AspNetRoles", "Project_ID");
        DropColumn("dbo.AspNetRoles", "Discriminator");
        DropTable("dbo.Projects");
    }
}

问题是-什么是“鉴别器”列?我的模型中没有这样的专栏。迁移工具为何要添加此字段,其目的是什么?

奥列克西

好吧,一个快速的答案可以理解,或者至少使其更加清晰。

正如Jasen所说,您可以http://weblogs.asp.net/manavi/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-1-table中阅读有关每个层次表(TPH)的信息。 -per-hierarchy-tph或任何其他链接。但是,说实话,从一开始就不那么容易理解。

这是一个简单的答案:

  1. 尝试使用从IdentityRole继承的ApplicationRole(该类,发布在问题中)创建一个新角色
  2. 创建新角色后,请查看“歧视”字段。

如您所见-新记录在“歧视”列中包含“ ApplicationRole”。可以这么说-该列包含继承了IdentityRole的新类的名称。因此,可能会有更多的类,这些类将继承IdentityRole,但是Identity系统将为每个记录存储值-使用创建记录的类。

在此处输入图片说明

如图所示,ApplicationRole Discriminator仅出现在该类创建的记录中,该记录称为ApplicationRole,该类继承了IdentityRole。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章