1

私のアプローチが完全に間違っている場合は、声をかけてください。

ASP.Net Identity 2.0 を利用しています。(MembershipDbContext で) クラスをカスタマイズしました。特に、2 つのクラスがあります。

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

別のコンテキスト クラス ApplicationDbContext があり、この説明ではアプリのメニュー システムに関連しています。各メニュー項目は CustomRoles と関係があります。つまり、特定の役割タイプのユーザーのみがそれらを見ることができます:

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; }
   ...
}

移行を実行してコンテキストごとにデータベースを更新すると、SQL データベースには 4 つのテーブルがあり、そのうち 2 つが重複しています。

正しいもの (MembershipDbContext から):

 1. App_CustomRoles
 2. App_CustomUserRoles

正しくないもの (ApplicationDbContext から):

 1. CustomRoles
 2. CustomUserRoles

メンバーシップとアプリのナビゲーション システムを別々のコンテキスト クラスに保持したいと思います。アプリケーション コンテキストで流暢な API を試して、不適切なテーブルを適切な名前の正しいテーブルに設定しようとしましたが、ビルド エラーが発生しました。

クラスを個別のコンテキストファイルに保持しながら、これを修正するにはどうすればよいですか?

ありがとうございました。

4

1 に答える 1

1

これが正しいアプローチかどうかはわかりませんが、次の場合:

  1. ApplicationDbContext で自動移行を無効にしてから、
  2. 移行を追加し、問題のテーブルをコメントアウトすると、すべて機能します。

これが正しいアプローチであるかどうか誰かが教えてくれれば幸いです:

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");
        }
    }
}
于 2014-04-25T16:29:52.253 に答える