EF Code-First 中的种子方法
Posted
技术标签:
【中文标题】EF Code-First 中的种子方法【英文标题】:Seed Method in EF Code-First 【发布时间】:2012-12-17 14:26:41 【问题描述】:我正在尝试使用 EF 的 Seed 方法用一些示例数据填充我的数据库,但是当我尝试运行它时,没有填充数据。
有人知道为什么吗? 谢谢。
数据库上下文:
public void Seed(EFloristEntities context)
new List<Product>
new Product() Id = 1, ProductName = "Product 1", ProductDescription = "a", Price = 1.0
.ForEach(i => context.Products.Add(i));
context.SaveChanges();
public DbSet<Product> Products get; set;
public DbSet<Order> Orders get; set;
public DbSet<OrderDetails> OrderDetails get; set;
public DbSet<Cart> Cart get; set;
我的初始化器:
public class CreateInitializer : CreateDatabaseIfNotExists<EFloristEntities>
protected override void Seed(EFloristEntities context)
context.Seed(context);
base.Seed(context);
全球.aspx:
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<EFloristEntities>());
new EFloristEntities().Database.CreateIfNotExists();
Database.SetInitializer(new CreateInitializer());
【问题讨论】:
嗯...global.aspx
? :)
【参考方案1】:
您根本没有在全局文件中初始化数据库。您需要运行以下代码:
EFloristEntities.Database.Initialize(true)
如果您想使用自定义初始化程序,我建议您将此代码放在 Database.SetInitializer(new CreateInitializer())
调用下方。
【讨论】:
我对此进行了测试但没有成功:( using (var context = new EFloristEntities()) context.Database.Initialize(true); 您的数据库已经创建了吗?如果是这样,您将需要使用不同的初始化程序(如上面的@kpadmanabhan)【参考方案2】:您已将初始化程序配置为使用 DropCreateDatabaseIfModelChanges。尝试将其替换为 DropCreateDatabaseAlways 一次。
【讨论】:
【参考方案3】:看起来您在调用自己的种子代码之后调用了基本初始化程序。
【讨论】:
以上是关于EF Code-First 中的种子方法的主要内容,如果未能解决你的问题,请参考以下文章
在使用 EF 4.1 Code-First 的 Include 和/或 Select 方法时订购导航属性?
20.翻译系列:Code-First中的数据库迁移技术EF 6 Code-First系列