Asp.net mvc DB初始值设定项不适用于CreateDatabaseIfNotExists,它将适用于所有其他类型
正如标题所说,由于某种原因,在指定CreateDatabaseIfNotExists时,我的数据库没有被创建。drop always和drop if model changes可以正常工作。数据库未创建。由于数据为空,因此在视图中出现错误 DBContextAsp.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
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文件。