[英]What is a Discriminator column in ASP.NET Migrations?
我需要在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");
}
}
問題是 - 什么是Discriminator專欄? 我的模型中沒有這樣的專欄。 為什么遷移工具會添加此字段以及它具有什么目標?
好吧,快速回答理解,或者至少使其更清晰。
正如Jasen所說,你可以在http://weblogs.asp.net/manavi/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-1-table上閱讀關於每層次表(TPH)的內容。 -per-hierarchy-tph或任何其他鏈接。 但是,說實話,從第一次開始就不那么容易理解。
這是一個快速回答:
如您所見 - 新記錄在“歧視”列中包含“ApplicationRole”。 所以說 - 該列包含繼承IdentityRole的新類的名稱。 因此,可能會有更多的類,它們將繼承IdentityRole,但對於每個記錄,Identity系統將存儲該值 - 使用創建記錄的類。
如圖所示,ApplicationRole Discriminator僅出現在由類創建的記錄中,稱為繼承IdentityRole的ApplicationRole。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.