简体   繁体   English

更新数据库将触发:“数据库中已经有一个名为'Adresses'的对象”。

[英]update-database fires: “There is already an object named 'Adresses' in the database”.

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"). 该数据库是多次迁移的结果,在该迁移中 ,我们使用ASP.NET MVC5身份数据库(我们称为“ IdentityDb”)迁移了自己创建的数据库“ Whitelabel”。

Here's an overview of the database tables: 这是数据库表的概述:

在此处输入图片说明

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

And it fires the error "There is already an object named 'Adresses' in the database". 并引发错误“数据库中已经存在一个名为'Adresses'的对象”。

Here's the WhitelabelDb Context. 这是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; }


    }
  }


 }

And here's the IdentityDb Context: 这是IdentityDb上下文:

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

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

}
}

Here's the configuration.cs file for WhitelabelMigrations: 这是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();
        }

    }
   }
  }

And the InitialCreate.cs file for Whitelabel-Migrations using System.Data.Entity.Migrations; 以及使用System.Data.Entity.Migrations的Whitelabel-Migrations的InitialCreate.cs文件;

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

And of course the Identity-Migrations InitialCreate.cs 当然还有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");
    }
   }
 }

So, how can I get the seed method to run since I only can access the Category class from the Whitelabel configuration.cs file? 那么,由于只能从Whitelabel configuration.cs文件访问Category类,因此如何使seed方法运行?

Any explanations, thoughts and constructive help would be greatly appreciated! 任何解释,想法和建设性的帮助将不胜感激!

Well actually, all I had to do was to add this line in the IdentityDb: 好吧,实际上,我要做的就是在IdentityDb中添加以下行:

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

The I could access the Category class in the IdentityMigrations configuration.cs and create my Seed method working the way I wanted it to. 我可以访问IdentityMigrations configuration.cs中的Category类,并按照我希望的方式创建我的Seed方法。

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

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Update-Database MVC 自动迁移 - 数据库中已经有一个名为“StationsArrangeds”的对象 - Update-Database MVC automatic migrations - There is already an object named 'StationsArrangeds' in the database 实体框架要求在已附加迁移的情况下更新数据库 - Entity Framework asks to update-database when migration is already appended Update-Database 命令在 ASP.Net Core / Entity Framework Core 中不起作用,因为数据库中的对象已经存在 - Update-Database command is not working in ASP.Net Core / Entity Framework Core because object in database already exists 数据库中已经有一个名为“ Employee”的对象 - There is already an object named 'Employee' in the database 数据库中已经有一个名为“ Reports”的对象 - There is already an object named 'Reports' in the database | DataDirectory目录| 用于EF更新数据库 - |DataDirectory| for EF Update-Database 卡在 EntityFramework 更新数据库上 - Stuck on EntityFramework update-database 数据库中已经有一个名为“__MigrationHistory”的对象 - There is already an object named '__MigrationHistory' in the database 数据库中已经有一个名为“ tableName”的对象 - There is already an object named 'tableName' in the database 尝试使用Entity Framework进行更新时,数据库中已存在名为“AspNetRoles”的对象 - There is already an object named 'AspNetRoles' in the database when trying to update with Entity Framework
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM