update-database触发:“数据库中已经有一个名为”Adresses“的对象。 [英] update-database fires: "There is already an object named 'Adresses' in the database".

查看:98
本文介绍了update-database触发:“数据库中已经有一个名为”Adresses“的对象。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我无法让我的种子方法在alredy现有数据库上运行。数据库是多重迁移的结果,我们使用ASP.NET MVC5身份数据库(我们称之为IdentityDb)迁移我们自己创建的数据库Whitelabel。

I can't get my seed method to run on an alredy existing database. The database was a result of multiple migrations where we migrated our own created database, "Whitelabel", with the ASP.NET MVC5 Identity database (that we call "IdentityDb").

以下是数据库表的概述:

Here's an overview of the database tables:

由于这是以代码为先的,所以我使用包管理器控制台使用以下命令更新数据库: / p>

Since this is made code-first, I used the package manager console to update the database with this command:

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

它触发错误已经存在一个名为Adresses在数据库中的对象。

And it fires the error "There is already an object named 'Adresses' in the database".

这是WhitelabelDb上下文。

Here's the WhitelabelDb Context.

  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上下文:

And here's the IdentityDb Context:

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

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

}
}

以下是WhitelabelMigrations的configuration.cs文件:

Here's the configuration.cs file for WhitelabelMigrations:

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();
        }

    }
   }
  }

而使用System.Data.Entity.Migrations的Whitelabel-Migrations
的InitialCreate.cs文件;

And the InitialCreate.cs file for Whitelabel-Migrations using System.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

And of course the Identity-Migrations 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");
    }
   }
 }

那么,我怎么可以运行的种子方法,因为我只能从Whitelabel configuration.cs文件访问Category类?

So, how can I get the seed method to run since I only can access the Category class from the Whitelabel configuration.cs file?

任何解释,想法和建设性的帮助将不胜感激! p>

Any explanations, thoughts and constructive help would be greatly appreciated!

推荐答案

其实我只需要在IdentityDb中添加这一行:

Well actually, all I had to do was to add this line in the IdentityDb:

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

我可以访问IdentityMigrations configuration.cs中的Category类,并创建我的Seed方法

The I could access the Category class in the IdentityMigrations configuration.cs and create my Seed method working the way I wanted it to.

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();
    }

}

这篇关于update-database触发:“数据库中已经有一个名为”Adresses“的对象。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆