Asp.net mvc DB初始值设定项不适用于CreateDatabaseIfNotExists,它将适用于所有其他类型

Asp.net mvc DB初始值设定项不适用于CreateDatabaseIfNotExists,它将适用于所有其他类型,asp.net-mvc,entity-framework,Asp.net Mvc,Entity Framework,正如标题所说,由于某种原因,在指定CreateDatabaseIfNotExists时,我的数据库没有被创建。drop always和drop if model changes可以正常工作。数据库未创建。由于数据为空,因此在视图中出现错误 DBContext public class SchemaDBContext : DbContext { public SchemaDBContext() { Database.SetInitia

正如标题所说,由于某种原因,在指定CreateDatabaseIfNotExists时,我的数据库没有被创建。drop always和drop if model changes可以正常工作。数据库未创建。由于数据为空,因此在视图中出现错误

DBContext

public class SchemaDBContext : DbContext
    {
        public SchemaDBContext()
        {
            Database.SetInitializer(new SchemaDBInitializer());
        }

        public DbSet<UserRole> UserRoles { get; set; }
        public DbSet<User> Users { get; set; }
        public DbSet<SalesStaff> SalesStaffs { get; set; }
        public DbSet<Customer> Customers { get; set; }
        public DbSet<CreditCard> CreditCards { get; set; }
        public DbSet<Enquiry> Enquiries { get; set; }

        public DbSet<Trip> Trips { get; set; }
        public DbSet<TripImage> TripImages { get; set; }
        public DbSet<Coach> Coaches { get; set; }
        public DbSet<Ticket> Tickets { get; set; }
        public DbSet<Review> Reviews { get; set; }

        public DbSet<CartItem> CartItems { get; set; }
        public DbSet<ShoppingCart> ShoppingCarts { get; set; }
        public DbSet<OrderItem> OrderItems { get; set; }
        public DbSet<Order> Orders { get; set; }
    }
公共类SchemaDBContext:DbContext
{
公共SchemaDBContext()
{
SetInitializer(新SchemaDBInitializer());
}
公共数据库集用户角色{get;set;}
公共数据库集用户{get;set;}
公共DbSet salesstaff{get;set;}
公共数据库集客户{get;set;}
公共数据库集信用卡{get;set;}
公共数据库集查询{get;set;}
公共数据库集Trips{get;set;}
公共数据库集{get;set;}
公共数据库集Coach{get;set;}
公共数据库集票证{get;set;}
公共数据库集评论{get;set;}
公共数据库集CartItems{get;set;}
公共数据库集购物车{get;set;}
公共数据库集OrderItems{get;set;}
公共数据库集命令{get;set;}
}
初始值设定项

public class SchemaDBInitializer : CreateDatabaseIfNotExists<SchemaDBContext>
    {
        protected override void Seed(SchemaDBContext context)
        {
            var customers = generateCustomers();
            customers.ForEach(s => s.ShoppingCart = new ShoppingCart());      
            customers.ForEach(s => context.Customers.Add(s));
            context.SaveChanges();

            var salesStaffs = generateSalesStaffs();
            salesStaffs.ForEach(s => context.SalesStaffs.Add(s));
            context.SaveChanges();

            var customerUsers = customers.Select(u => u.User).ToList();
            var salesStaffUsers = salesStaffs.Select(u => u.User).ToList();

            var userRoles = new List<UserRole>
            {
                new UserRole()
                {
                    Role = "Customer",
                    Users = customerUsers
                },
                new UserRole()
                {
                    Role = "SalesStaff",
                    Users = salesStaffUsers
                }
            };

            userRoles.ForEach(s => context.UserRoles.Add(s));
            context.SaveChanges();

            var trips = generateTrips();
            trips.ForEach(s => context.Trips.Add(s));
            context.SaveChanges();

            var tickets = generateTickets(customers, trips);
            tickets.ForEach(s => context.Tickets.Add(s));
            context.SaveChanges();

            var reviews = generateReviews(customers, trips);
            reviews.ForEach(s => context.Reviews.Add(s));
            context.SaveChanges();

            var enquiries = generatEnquiries(customers, salesStaffs);
            enquiries.ForEach(s => context.Enquiries.Add(s));
            context.SaveChanges();

            var orders = generateOrders(customers);
            orders.ForEach(order => context.Orders.Add(order));
            context.SaveChanges();

        }
}
公共类SchemadBInInitializer:CreateDatabaseIfNotExists
{
受保护的覆盖无效种子(SchemaDBContext上下文)
{
var customers=generateCustomers();
customers.ForEach(s=>s.ShoppingCart=newshoppingcart());
customers.ForEach(s=>context.customers.Add);
SaveChanges();
var salesstaff=generateSalestaff();
salesstaff.ForEach(s=>context.salesstaff.Add);
SaveChanges();
var customerUsers=customers.Select(u=>u.User.ToList();
var salesStaffUsers=salesStaffUsers.Select(u=>u.User.ToList();
var userRoles=新列表
{
新用户角色()
{
Role=“客户”,
用户=客户用户
},
新用户角色()
{
Role=“SalesStaff”,
用户=销售人员用户
}
};
ForEach(s=>context.userRoles.Add);
SaveChanges();
var trips=generateTrips();
trips.ForEach(s=>context.trips.Add);
SaveChanges();
var票=发电票(客户、行程);
tickets.ForEach(s=>context.tickets.Add);
SaveChanges();
var审查=生成视图(客户、行程);
reviews.ForEach(s=>context.reviews.Add);
SaveChanges();
var查询=生成查询(客户、销售人员);
查询.ForEach(s=>context.inquiries.Add);
SaveChanges();
var订单=生成订单(客户);
orders.ForEach(order=>context.orders.Add(order));
SaveChanges();
}
}

初始值设定项没有调用seed方法。

主题外,但我认为最好有一个
context.SaveChanges()在种子方法中调用(全部保存或不保存)。关于主题:我假设您测试了这个,而数据库实际上并不存在。但我希望当EF试图创建它时,您会看到异常弹出?@GertArnold我在数据库不存在时测试了它。我在创建/初始化数据库时没有遇到异常。当view尝试使用数据库中的数据时,会出现异常。没有创建.mdx。@GertArnold似乎没有调用seed,所以即使我删除了mdx文件,它也可能认为某个地方有数据库。@GertArnold它是内置于sql express数据库中的。我相信迁移可能出了问题?因为我手动删除了mdx文件,所以在它认为数据库不存在之前,我可能应该删除其他文件。所以你可能是指mdf文件。