开发者

Entity Framework Inserting Initial Data On Rebuild

开发者 https://www.devze.com 2023-04-09 11:46 出处:网络
I am using Entity Framework code-first with a MySQL data source. I\'ve defined ContactType.cs as follows:

I am using Entity Framework code-first with a MySQL data source.

I've defined ContactType.cs as follows:

public class ContactType
{
    [Key]
    public int ContactTypeId { get; set; }

    [Required, StringLength(30)]
    public string DisplayNa开发者_JAVA技巧me { get; set; }
}

My question is, after I rebuild the database, how can I have EF to insert (without SQL) some contact types into the database. Normally, the DB is rebuilt as a blank schema, but I'd like to add contact types like (Home,Mobile,Office,Fax).


You create a custom database initializer and overwrite the Seed method

public class MyContextInitializer
    : DropCreateDatabaseIfModelChanges<MyContext>
{
    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
    }
}

Then you register this initializer for your derived context MyContext:

Database.SetInitializer<MyContext>(new MyContextInitializer());

This is a static method of the Database class and should be called somewhere once at application startup. You can also put it into a static constructor of your context to make sure that the intializer is set before you create the first context instance:

static MyContext()
{
    Database.SetInitializer<MyContext>(new MyContextInitializer());
}

Instead of the base initializer DropCreateDatabaseIfModelChanges<T> you can also derive from DropCreateDatabaseAlways<T> or CreateDatabaseIfNotExists<T> if that better meets your needs.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号