entity framework在重建时插入初始数据
我正在使用entity framework代码优先使用MySQL数据源。
我已经定义了ContactType.cs
,如下所示:
public class ContactType { [Key] public int ContactTypeId { get; set; } [Required, StringLength(30)] public string DisplayName { get; set; } }
我的问题是,在重建数据库之后,我如何让EF将一些联系类型插入(没有SQL)数据库中。 通常,DB会重建为空白架构,但我想添加联系人类型,如(家庭,移动,办公室,传真)。
您创建自定义数据库初始化程序并覆盖Seed
方法
public class MyContextInitializer : DropCreateDatabaseIfModelChanges { protected override void Seed(MyContext context) { context.ContactTypes.Add(new ContactType { DisplayName = "Home" }); context.ContactTypes.Add(new ContactType { DisplayName = "Mobile" }); context.ContactTypes.Add(new ContactType { DisplayName = "Office" }); context.ContactTypes.Add(new ContactType { DisplayName = "Fax" }); //EF will call SaveChanges itself } }
然后为派生的上下文MyContext
注册此初始值MyContext
:
Database.SetInitializer(new MyContextInitializer());
这是Database
类的静态方法,应该在应用程序启动时在某处调用。 您还可以将其放入上下文的静态构造函数中,以确保在创建第一个上下文实例之前设置了初始化程序:
static MyContext() { Database.SetInitializer(new MyContextInitializer()); }
如果更好地满足您的需求,您还可以从DropCreateDatabaseAlways
或CreateDatabaseIfNotExists
派生而不是基本初始值设定项DropCreateDatabaseIfModelChanges
。