2014-04-14 37 views
0

我無法讓我的種子方法在現有的數據庫上運行。該數據庫是多次遷移的結果我們將自己創建的數據庫「Whitelabel」與ASP.NET MVC5 Identity數據庫(我們稱之爲「IdentityDb」)進行了遷移。update-database觸發:「數據庫中已有一個名爲'Adresses'的對象」。

這裏的數據庫表的概述:

enter image description here

因爲這是由代碼首先,我用包管理器控制檯更新與此命令的數據庫:

PM> update-database -ConfigurationTypeName DAL.DataContexts.WhitelabelMigrations.Configuration 

它會激發錯誤「數據庫中已有一個名爲'Adresses'的對象」。

這是WhitelabelDb上下文。

using System.Data.Entity; 
    using ClassLibrary.Entities; 

    namespace DAL.DataContexts 
    { 
    public class WhitelabelDb : DbContext 
    { 
    public WhitelabelDb() 
     : base("WhitelabelDb") 
    { 
    } 

    public virtual DbSet<Category> CategorySet { get; set; } 
    public virtual DbSet<Product> ProductSet { get; set; } 
    public virtual DbSet<Stock> StockSet { get; set; } 
    public virtual DbSet<Rating> RatingSet { get; set; } 
    public virtual DbSet<Discount> DiscountSet { get; set; } 
    public virtual DbSet<LineItem> LineItemSet { get; set; } 
    public virtual DbSet<ShoppingCart> ShoppingCartSet { get; set; } 
    public virtual DbSet<Invoice> InvoiceSet { get; set; } 
    public virtual DbSet<Customer> CustomerSet { get; set; } 
    public virtual DbSet<Adress> AdressSet { get; set; } 


    } 
    } 


} 

而這裏的IdentityDb語境:

using ClassLibrary.Entities; 
using Microsoft.AspNet.Identity.EntityFramework; 

namespace DAL.DataContexts 
{ 
public class IdentityDb : IdentityDbContext<ApplicationUser> 
{ 
    public IdentityDb() 
     : base("WhitelabelDb") 
    { 
    } 

} 
} 

下面是WhitelabelMigrations的configuration.cs文件:

using System.Data.Entity.Migrations; 
using System; 
using System.Collections.ObjectModel; 
using System.Data.Entity.Migrations; 
using System.Linq; 
using ClassLibrary.Entities; 


namespace DAL.DataContexts.WhitelabelMigrations 
{ 
internal sealed class Configuration : DbMigrationsConfiguration<WhitelabelDb> 
{ 

    public Configuration() 
    { 
     AutomaticMigrationsEnabled = true; 
     MigrationsDirectory = @"DataContexts\WhitelabelMigrations"; 
    } 

    protected override void Seed(WhitelabelDb context) 
    { 
     **//This is the seed method I want to run when I update the database:** 
     if(!context.CategorySet.Any(c => c.Name == "Root")) 
     { 
      Category mainCategory = new Category { Id = Guid.NewGuid(), Name = "Root", Parent = null }; 
      context.CategorySet.Add(mainCategory); 
      context.SaveChanges(); 
     } 

    } 
    } 
    } 

而且InitialCreate.cs文件使用系統WhitelabelMigrations 。 Data.Entity.Migrations;

namespace DAL.DataContexts.WhitelabelMigrations 
{ 
    public partial class InitialCreate : DbMigration 
    { 
    public override void Up() 
    { 
     CreateTable(
      "dbo.Adresses", 
      c => new 
      { 
       Id = c.Guid(false), 
       Street = c.String(), 
       ZipCode = c.Int(false), 
       City = c.String(), 
       Country = c.String(), 
       IsShippingAdress = c.Boolean(false), 
       Customer_Id = c.Guid(), 
      }) 
      .PrimaryKey(t => t.Id) 
      .ForeignKey("dbo.Customers", t => t.Customer_Id) 
      .Index(t => t.Customer_Id); 

     CreateTable(
      "dbo.Customers", 
      c => new 
      { 
       Id = c.Guid(false), 
       FirstName = c.String(), 
       LastName = c.String(), 
       Email = c.String(), 
      }) 
      .PrimaryKey(t => t.Id); 

     CreateTable(
      "dbo.Invoices", 
      c => new 
      { 
       Id = c.Guid(false), 
       DueDate = c.DateTime(false), 
       InvoiceDate = c.DateTime(false), 
       Customer_Id = c.Guid(), 
       ShoppingCart_Id = c.Guid(), 
      }) 
      .PrimaryKey(t => t.Id) 
      .ForeignKey("dbo.Customers", t => t.Customer_Id) 
      .ForeignKey("dbo.ShoppingCarts", t => t.ShoppingCart_Id) 
      .Index(t => t.Customer_Id) 
      .Index(t => t.ShoppingCart_Id); 

     CreateTable(
      "dbo.ShoppingCarts", 
      c => new 
      { 
       Id = c.Guid(false), 
       Quantity = c.String(), 
       Status = c.String(), 
       IsPaid = c.Boolean(false), 
      }) 
      .PrimaryKey(t => t.Id); 

     CreateTable(
      "dbo.LineItems", 
      c => new 
      { 
       Id = c.Guid(false), 
       Quantity = c.Int(false), 
       ProductId = c.Guid(), 
       ShoppingCart_Id = c.Guid(), 
      }) 
      .PrimaryKey(t => t.Id) 
      .ForeignKey("dbo.Products", t => t.ProductId) 
      .ForeignKey("dbo.ShoppingCarts", t => t.ShoppingCart_Id) 
      .Index(t => t.ProductId) 
      .Index(t => t.ShoppingCart_Id); 

     CreateTable(
      "dbo.Products", 
      c => new 
      { 
       Id = c.Guid(false), 
       Name = c.String(), 
       Description = c.String(), 
       Price = c.Decimal(false, 18, 2), 
       Status = c.String(), 
       RekeaseDate = c.DateTime(), 
       Weight = c.Double(), 
       Category_Id = c.Guid(), 
       Discount_Id = c.Guid(), 
       Stock_Id = c.Guid(), 
      }) 
      .PrimaryKey(t => t.Id) 
      .ForeignKey("dbo.Categories", t => t.Category_Id) 
      .ForeignKey("dbo.Discounts", t => t.Discount_Id) 
      .ForeignKey("dbo.Stocks", t => t.Stock_Id) 
      .Index(t => t.Category_Id) 
      .Index(t => t.Discount_Id) 
      .Index(t => t.Stock_Id); 

     CreateTable(
      "dbo.Categories", 
      c => new 
      { 
       Id = c.Guid(false), 
       Name = c.String(), 
       Parent = c.Guid(), 
      }) 
      .PrimaryKey(t => t.Id); 

     CreateTable(
      "dbo.Attributes", 
      c => new 
      { 
       Id = c.Guid(false), 
       Name = c.String(), 
       Category_Id = c.Guid(), 
      }) 
      .PrimaryKey(t => t.Id) 
      .ForeignKey("dbo.Categories", t => t.Category_Id) 
      .Index(t => t.Category_Id); 

     CreateTable(
      "dbo.Discounts", 
      c => new 
      { 
       Id = c.Guid(false), 
       Price = c.Decimal(precision: 18, scale: 2), 
       StartDate = c.DateTime(), 
       EndDate = c.DateTime(), 
      }) 
      .PrimaryKey(t => t.Id); 

     CreateTable(
      "dbo.Ratings", 
      c => new 
      { 
       Id = c.Guid(false), 
       Rate = c.Int(), 
       Comment = c.String(), 
       Product_Id = c.Guid(), 
      }) 
      .PrimaryKey(t => t.Id) 
      .ForeignKey("dbo.Products", t => t.Product_Id) 
      .Index(t => t.Product_Id); 

     CreateTable(
      "dbo.Stocks", 
      c => new 
      { 
       Id = c.Guid(false), 
       Quantity = c.Int(), 
       DeliveryDate = c.DateTime(), 
      }) 
      .PrimaryKey(t => t.Id); 
    } 

    public override void Down() 
    { 
     DropForeignKey("dbo.Invoices", "ShoppingCart_Id", "dbo.ShoppingCarts"); 
     DropForeignKey("dbo.LineItems", "ShoppingCart_Id", "dbo.ShoppingCarts"); 
     DropForeignKey("dbo.LineItems", "ProductId", "dbo.Products"); 
     DropForeignKey("dbo.Products", "Stock_Id", "dbo.Stocks"); 
     DropForeignKey("dbo.Ratings", "Product_Id", "dbo.Products"); 
     DropForeignKey("dbo.Products", "Discount_Id", "dbo.Discounts"); 
     DropForeignKey("dbo.Products", "Category_Id", "dbo.Categories"); 
     DropForeignKey("dbo.Attributes", "Category_Id", "dbo.Categories"); 
     DropForeignKey("dbo.Invoices", "Customer_Id", "dbo.Customers"); 
     DropForeignKey("dbo.Adresses", "Customer_Id", "dbo.Customers"); 
     DropIndex("dbo.Invoices", new[] {"ShoppingCart_Id"}); 
     DropIndex("dbo.LineItems", new[] {"ShoppingCart_Id"}); 
     DropIndex("dbo.LineItems", new[] {"ProductId"}); 
     DropIndex("dbo.Products", new[] {"Stock_Id"}); 
     DropIndex("dbo.Ratings", new[] {"Product_Id"}); 
     DropIndex("dbo.Products", new[] {"Discount_Id"}); 
     DropIndex("dbo.Products", new[] {"Category_Id"}); 
     DropIndex("dbo.Attributes", new[] {"Category_Id"}); 
     DropIndex("dbo.Invoices", new[] {"Customer_Id"}); 
     DropIndex("dbo.Adresses", new[] {"Customer_Id"}); 
     DropTable("dbo.Stocks"); 
     DropTable("dbo.Ratings"); 
     DropTable("dbo.Discounts"); 
     DropTable("dbo.Attributes"); 
     DropTable("dbo.Categories"); 
     DropTable("dbo.Products"); 
     DropTable("dbo.LineItems"); 
     DropTable("dbo.ShoppingCarts"); 
     DropTable("dbo.Invoices"); 
     DropTable("dbo.Customers"); 
     DropTable("dbo.Adresses"); 
    } 
    } 
    } 

當然和身份的遷移InitialCreate.cs

using System.Data.Entity.Migrations; 

    namespace DAL.DataContexts.IdentityMigrations 
    { 
    public partial class InitialCreate : DbMigration 
    { 
    public override void Up() 
    { 
     CreateTable(
      "dbo.AspNetRoles", 
      c => new 
      { 
       Id = c.String(false, 128), 
       Name = c.String(false), 
      }) 
      .PrimaryKey(t => t.Id); 

     CreateTable(
      "dbo.AspNetUsers", 
      c => new 
      { 
       Id = c.String(false, 128), 
       UserName = c.String(), 
       PasswordHash = c.String(), 
       SecurityStamp = c.String(), 
       Discriminator = c.String(false, 128), 
       Customer_Id = c.Guid(), 
      }) 
      .PrimaryKey(t => t.Id) 
      .ForeignKey("dbo.Customers", t => t.Customer_Id) 
      .Index(t => t.Customer_Id); 

     CreateTable(
      "dbo.AspNetUserClaims", 
      c => new 
      { 
       Id = c.Int(false, true), 
       ClaimType = c.String(), 
       ClaimValue = c.String(), 
       User_Id = c.String(false, 128), 
      }) 
      .PrimaryKey(t => t.Id) 
      .ForeignKey("dbo.AspNetUsers", t => t.User_Id, true) 
      .Index(t => t.User_Id); 

     CreateTable(
      "dbo.AspNetUserLogins", 
      c => new 
      { 
       UserId = c.String(false, 128), 
       LoginProvider = c.String(false, 128), 
       ProviderKey = c.String(false, 128), 
      }) 
      .PrimaryKey(t => new {t.UserId, t.LoginProvider, t.ProviderKey}) 
      .ForeignKey("dbo.AspNetUsers", t => t.UserId, true) 
      .Index(t => t.UserId); 

     CreateTable(
      "dbo.AspNetUserRoles", 
      c => new 
      { 
       UserId = c.String(false, 128), 
       RoleId = c.String(false, 128), 
      }) 
      .PrimaryKey(t => new {t.UserId, t.RoleId}) 
      .ForeignKey("dbo.AspNetRoles", t => t.RoleId, true) 
      .ForeignKey("dbo.AspNetUsers", t => t.UserId, true) 
      .Index(t => t.RoleId) 
      .Index(t => t.UserId); 

     CreateTable(
      "dbo.Customers", 
      c => new 
      { 
       Id = c.Guid(false), 
       FirstName = c.String(), 
       LastName = c.String(), 
       Email = c.String(), 
      }) 
      .PrimaryKey(t => t.Id); 

     CreateTable(
      "dbo.Adresses", 
      c => new 
      { 
       Id = c.Guid(false), 
       Street = c.String(), 
       ZipCode = c.Int(false), 
       City = c.String(), 
       Country = c.String(), 
       IsShippingAdress = c.Boolean(false), 
       Customer_Id = c.Guid(), 
      }) 
      .PrimaryKey(t => t.Id) 
      .ForeignKey("dbo.Customers", t => t.Customer_Id) 
      .Index(t => t.Customer_Id); 

     CreateTable(
      "dbo.Invoices", 
      c => new 
      { 
       Id = c.Guid(false), 
       DueDate = c.DateTime(false), 
       InvoiceDate = c.DateTime(false), 
       Customer_Id = c.Guid(), 
       ShoppingCart_Id = c.Guid(), 
      }) 
      .PrimaryKey(t => t.Id) 
      .ForeignKey("dbo.Customers", t => t.Customer_Id) 
      .ForeignKey("dbo.ShoppingCarts", t => t.ShoppingCart_Id) 
      .Index(t => t.Customer_Id) 
      .Index(t => t.ShoppingCart_Id); 

     CreateTable(
      "dbo.ShoppingCarts", 
      c => new 
      { 
       Id = c.Guid(false), 
       Quantity = c.String(), 
       Status = c.String(), 
       IsPaid = c.Boolean(false), 
      }) 
      .PrimaryKey(t => t.Id); 

     CreateTable(
      "dbo.LineItems", 
      c => new 
      { 
       Id = c.Guid(false), 
       Quantity = c.Int(false), 
       ProductId = c.Guid(), 
       ShoppingCart_Id = c.Guid(), 
      }) 
      .PrimaryKey(t => t.Id) 
      .ForeignKey("dbo.Products", t => t.ProductId) 
      .ForeignKey("dbo.ShoppingCarts", t => t.ShoppingCart_Id) 
      .Index(t => t.ProductId) 
      .Index(t => t.ShoppingCart_Id); 

     CreateTable(
      "dbo.Products", 
      c => new 
      { 
       Id = c.Guid(false), 
       Name = c.String(), 
       Description = c.String(), 
       Price = c.Decimal(false, 18, 2), 
       Status = c.String(), 
       RekeaseDate = c.DateTime(), 
       Weight = c.Double(), 
       Category_Id = c.Guid(), 
       Discount_Id = c.Guid(), 
       Stock_Id = c.Guid(), 
      }) 
      .PrimaryKey(t => t.Id) 
      .ForeignKey("dbo.Categories", t => t.Category_Id) 
      .ForeignKey("dbo.Discounts", t => t.Discount_Id) 
      .ForeignKey("dbo.Stocks", t => t.Stock_Id) 
      .Index(t => t.Category_Id) 
      .Index(t => t.Discount_Id) 
      .Index(t => t.Stock_Id); 

     CreateTable(
      "dbo.Categories", 
      c => new 
      { 
       Id = c.Guid(false), 
       Name = c.String(), 
       Parent = c.Guid(), 
      }) 
      .PrimaryKey(t => t.Id); 

     CreateTable(
      "dbo.Attributes", 
      c => new 
      { 
       Id = c.Guid(false), 
       Name = c.String(), 
       Category_Id = c.Guid(), 
      }) 
      .PrimaryKey(t => t.Id) 
      .ForeignKey("dbo.Categories", t => t.Category_Id) 
      .Index(t => t.Category_Id); 

     CreateTable(
      "dbo.Discounts", 
      c => new 
      { 
       Id = c.Guid(false), 
       Price = c.Decimal(precision: 18, scale: 2), 
       StartDate = c.DateTime(), 
       EndDate = c.DateTime(), 
      }) 
      .PrimaryKey(t => t.Id); 

     CreateTable(
      "dbo.Ratings", 
      c => new 
      { 
       Id = c.Guid(false), 
       Rate = c.Int(), 
       Comment = c.String(), 
       Product_Id = c.Guid(), 
      }) 
      .PrimaryKey(t => t.Id) 
      .ForeignKey("dbo.Products", t => t.Product_Id) 
      .Index(t => t.Product_Id); 

     CreateTable(
      "dbo.Stocks", 
      c => new 
      { 
       Id = c.Guid(false), 
       Quantity = c.Int(), 
       DeliveryDate = c.DateTime(), 
      }) 
      .PrimaryKey(t => t.Id); 
    } 

    public override void Down() 
    { 
     DropForeignKey("dbo.AspNetUsers", "Customer_Id", "dbo.Customers"); 
     DropForeignKey("dbo.Invoices", "ShoppingCart_Id", "dbo.ShoppingCarts"); 
     DropForeignKey("dbo.LineItems", "ShoppingCart_Id", "dbo.ShoppingCarts"); 
     DropForeignKey("dbo.LineItems", "ProductId", "dbo.Products"); 
     DropForeignKey("dbo.Products", "Stock_Id", "dbo.Stocks"); 
     DropForeignKey("dbo.Ratings", "Product_Id", "dbo.Products"); 
     DropForeignKey("dbo.Products", "Discount_Id", "dbo.Discounts"); 
     DropForeignKey("dbo.Products", "Category_Id", "dbo.Categories"); 
     DropForeignKey("dbo.Attributes", "Category_Id", "dbo.Categories"); 
     DropForeignKey("dbo.Invoices", "Customer_Id", "dbo.Customers"); 
     DropForeignKey("dbo.Adresses", "Customer_Id", "dbo.Customers"); 
     DropForeignKey("dbo.AspNetUserClaims", "User_Id", "dbo.AspNetUsers"); 
     DropForeignKey("dbo.AspNetUserRoles", "UserId", "dbo.AspNetUsers"); 
     DropForeignKey("dbo.AspNetUserRoles", "RoleId", "dbo.AspNetRoles"); 
     DropForeignKey("dbo.AspNetUserLogins", "UserId", "dbo.AspNetUsers"); 
     DropIndex("dbo.AspNetUsers", new[] {"Customer_Id"}); 
     DropIndex("dbo.Invoices", new[] {"ShoppingCart_Id"}); 
     DropIndex("dbo.LineItems", new[] {"ShoppingCart_Id"}); 
     DropIndex("dbo.LineItems", new[] {"ProductId"}); 
     DropIndex("dbo.Products", new[] {"Stock_Id"}); 
     DropIndex("dbo.Ratings", new[] {"Product_Id"}); 
     DropIndex("dbo.Products", new[] {"Discount_Id"}); 
     DropIndex("dbo.Products", new[] {"Category_Id"}); 
     DropIndex("dbo.Attributes", new[] {"Category_Id"}); 
     DropIndex("dbo.Invoices", new[] {"Customer_Id"}); 
     DropIndex("dbo.Adresses", new[] {"Customer_Id"}); 
     DropIndex("dbo.AspNetUserClaims", new[] {"User_Id"}); 
     DropIndex("dbo.AspNetUserRoles", new[] {"UserId"}); 
     DropIndex("dbo.AspNetUserRoles", new[] {"RoleId"}); 
     DropIndex("dbo.AspNetUserLogins", new[] {"UserId"}); 
     DropTable("dbo.Stocks"); 
     DropTable("dbo.Ratings"); 
     DropTable("dbo.Discounts"); 
     DropTable("dbo.Attributes"); 
     DropTable("dbo.Categories"); 
     DropTable("dbo.Products"); 
     DropTable("dbo.LineItems"); 
     DropTable("dbo.ShoppingCarts"); 
     DropTable("dbo.Invoices"); 
     DropTable("dbo.Adresses"); 
     DropTable("dbo.Customers"); 
     DropTable("dbo.AspNetUserRoles"); 
     DropTable("dbo.AspNetUserLogins"); 
     DropTable("dbo.AspNetUserClaims"); 
     DropTable("dbo.AspNetUsers"); 
     DropTable("dbo.AspNetRoles"); 
    } 
    } 
} 

所以,我怎樣才能得到種子的方法來運行,因爲我只能從白色標籤configuration.cs文件訪問類別類?

任何解釋,思想和建設性的幫助,將不勝感激!

回答

0

嗯,事實上,我所要做的就是加入這一行的IdentityDb:

public virtual DbSet<Category> CategorySet { get; set; } 

的我可以訪問在IdentityMigrations configuration.cs Category類和創建我的種子法的工作我的方式想要它。

protected override void Seed(IdentityDb context) 
{ 
    **//This is the seed method I want to run when I update the database:** 
    if(!context.CategorySet.Any(c => c.Name == "Root")) 
    { 
     Category mainCategory = new Category { Id = Guid.NewGuid(), Name = "Root", Parent = null }; 
     context.CategorySet.Add(mainCategory); 
     context.SaveChanges(); 
    } 

} 
相關問題