2014-04-25 2 views
1

Si mon approche est incorrecte, veuillez en parler.Entity Framework 6.0, Identité ASP.Net 2.0, Migrations multiples, classes associées

J'utilise ASP.Net Identity 2.0. Je personnalisent les cours (dans mon MembershipDbContext), en particulier, j'ai 2 classes:

1. CustomRoles (in fluent api renamed table to "App_CustomRoles") 
2. CustomUserRoles (in fluent api renamed table to "App_CustomUserRoles") 

J'ai une autre classe de contexte, ApplicationDbContext que cette discussion porte sur le système de menus de l'application. Les éléments de menu respectifs ont une relation avec CustomRoles. C'est-à-dire, seuls les utilisateurs d'un certain type de rôle sera en mesure de les voir:

public class DbMenu 
{ 
    // Backing Fields 
    ... 
    private ICollection<DbMenuRole> _dbMenuRoles; 

    public DbMenu() 
    { 
    ... 
     _dbMenuRoles = new Collection<DbMenuRole>(); 
    } 
    ... 
    public virtual ICollection<DbMenuRole> DbMenuRoles 
    { 
     get { return _dbMenuRoles; } 
     set { _dbMenuRoles = value; } 
    } 
    public class DbMenuRole 
{ 
    ... 
    // Foreign Keys 
    [Required] 
    public long FK_RoleId { get; set; } 
    ... 
    // Associations 
    [ForeignKey("FK_RoleId")] 
    public virtual CustomRole CustomRole { get; set; } 
    ... 
} 

Quand je lance la migration et mettre à jour la base de données pour chaque contexte, mon db sql dispose de 4 tables dont 2 sont doubles:

les corrects (de MembershipDbContext):

1. App_CustomRoles 
2. App_CustomUserRoles 

Ones incorrectes (De ApplicationDbContext):

1. CustomRoles 
2. CustomUserRoles 

Je préférerais garder le système de navigation de l'adhésion et de l'application dans des classes de contexte séparées. J'ai essayé API couramment dans le contexte de l'application pour définir les tables incorrectes sur les tables correctes correctement nommés, mais cela a causé une erreur de construction.

Comment puis-je corriger cela tout en conservant mes classes dans des fichiers de contexte séparés?

Merci.

Répondre

1

Je ne sais pas si cela est la bonne approche mais si je:

  1. Désactiver les migrations automatiques ApplicationDbContext, puis
  2. Ajouter une migration pour elle et commenter les tableaux en question, tous les travaux.

Je vous serais reconnaissant si quelqu'un me dira si cela est la bonne approche:

namespace Data.Migrations_ApplicationDbContext 
{ 
using System; 
using System.Data.Entity.Migrations; 

public partial class ApplicationDbContext : DbMigration 
{ 
    public override void Up() 
    { 
     CreateTable(
      "dbo.App_DbMenuRoles", 
      c => new 
       { 
        Id = c.Long(nullable: false, identity: true), 
        FK_RoleId = c.Long(nullable: false), 
        FK_DbMenuId = c.Long(nullable: false), 
       }) 
      .PrimaryKey(t => t.Id) 
      .ForeignKey("dbo.App_CustomRoles", t => t.FK_RoleId, cascadeDelete: true) 
      .ForeignKey("dbo.App_DbMenus", t => t.FK_DbMenuId, cascadeDelete: true) 
      .Index(t => t.FK_RoleId) 
      .Index(t => t.FK_DbMenuId); 

     //CreateTable(
     // "dbo.App_CustomRoles", 
     // c => new 
     //  { 
     //   Id = c.Long(nullable: false, identity: true), 
     //   Name = c.String(), 
     //  }) 
     // .PrimaryKey(t => t.Id); 

     //CreateTable(
     // "dbo.App_CustomUserRoles", 
     // c => new 
     //  { 
     //   Id = c.Long(nullable: false, identity: true), 
     //   UserId = c.Long(nullable: false), 
     //   RoleId = c.Long(nullable: false), 
     //   CustomRole_Id = c.Long(), 
     //  }) 
     // .PrimaryKey(t => t.Id) 
     // .ForeignKey("dbo.App_CustomRoles", t => t.CustomRole_Id) 
     // .Index(t => t.CustomRole_Id); 

     CreateTable(
      "dbo.App_DbMenus", 
      c => new 
       { 
        Id = c.Long(nullable: false, identity: true), 
        Title = c.String(nullable: false), 
        PrimaryUrl = c.String(nullable: false), 
        SecondaryUrl = c.String(), 
        TertiaryUrl = c.String(), 
        FK_ParentId = c.Long(), 
       }) 
      .PrimaryKey(t => t.Id) 
      .ForeignKey("dbo.App_DbMenus", t => t.FK_ParentId) 
      .Index(t => t.FK_ParentId); 

    } 

    public override void Down() 
    { 
     DropForeignKey("dbo.App_DbMenus", "FK_ParentId", "dbo.App_DbMenus"); 
     DropForeignKey("dbo.App_DbMenuRoles", "FK_DbMenuId", "dbo.App_DbMenus"); 
     DropForeignKey("dbo.App_DbMenuRoles", "FK_RoleId", "dbo.App_CustomRoles"); 
     DropForeignKey("dbo.App_CustomUserRoles", "CustomRole_Id", "dbo.App_CustomRoles"); 
     DropIndex("dbo.App_DbMenus", new[] { "FK_ParentId" }); 
     DropIndex("dbo.App_CustomUserRoles", new[] { "CustomRole_Id" }); 
     DropIndex("dbo.App_DbMenuRoles", new[] { "FK_DbMenuId" }); 
     DropIndex("dbo.App_DbMenuRoles", new[] { "FK_RoleId" }); 
     DropTable("dbo.App_DbMenus"); 
     DropTable("dbo.App_CustomUserRoles"); 
     DropTable("dbo.App_CustomRoles"); 
     DropTable("dbo.App_DbMenuRoles"); 
     } 
    } 
} 
+0

Je ne sais pas si c'est le « droit chemin », mais je peux vous dire que je fini par avoir faire la même chose pour des problèmes similaires. http://stackoverflow.com/a/23221018/2441808 – Casey

Questions connexes