Asp.net
什麼是 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或任何其他連結。但是,說實話,從一開始就不是那麼容易理解的。
這是一個快速的答案:
- 嘗試使用繼承自 IdentityRole 的ApplicationRole(已發布的類)創建一個新角色
- 創建新角色後,請查看歧視欄位。
如您所見 - 新記錄在 Discrimination 列中包含“ApplicationRole”。可以這麼說 - 該列包含繼承 IdentityRole 的新類的名稱。因此,可能會有更多類繼承 IdentityRole,但對於每條記錄,身份系統將儲存值 - 使用創建記錄的類。
如圖所示,ApplicationRole Discriminator 僅針對由繼承 IdentityRole 的名為 ApplicationRole 的類創建的記錄出現。
