微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ASP.NET迁移中的Discriminator列是什么?

我需要在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","dbo.Projects","ID");
    }

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

问题是 – 什么是discriminator专栏?我的模型中没有这样的专栏.为什么迁移工具会添加此字段以及它具有哪些目标?

解决方法

嗯,快速回答理解,或者至少使其更清晰.

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

这是一个快速回答:

>尝试使用继承自IdentityRole的ApplicationRole(已发布的类)来创建新角色
>创建新角色后,请查看“识别”字段.

如您所见 – 新记录在“歧视”列中包含“ApplicationRole”.所以说 – 该列包含继承IdentityRole的新类的名称.
因此,可能会有更多的类,它们将继承IdentityRole,但对于每个记录,Identity系统将存储该值 – 使用创建记录的类.

如图所示,ApplicationRole discriminator仅出现在由类创建的记录中,称为继承IdentityRole的ApplicationRole.

原文地址:https://www.jb51.cc/aspnet/251953.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐