如何强制实体框架插入记录清理数据库的每次解决方案运行



回答问题前请先通读全文。所有的东西在教程中,堆栈溢出主题不起作用。

我试图强迫实体框架插入记录到数据库每次我运行调试程序,即使没有任何变化。这意味着如果我在上次运行期间做了任何更改,它们将消失。这是不可能的。

我Global.asax

:

 protected void Application_Start() {
            Database.SetInitializer(new MigrateDatabaseToLatestVersion<PersonContext, Configuration>()); 
            Database.SetInitializer(new DropCreateDatabaseAlways<PersonContext>());
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }

我的网页。配置实体框架部分:

  <entityFramework>
    <contexts>
     <context type="WebApplication2.Models.PersonContext, WebApplication2">
        <databaseInitializer type="WebApplication2.Models.PersonInitializer, WebApplication2" />
      </context>
    </contexts>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>

我的种子方法:

   protected override void Seed(PersonContext context) {
            var persons = new List<Person> { 
             new Person{FirstName = "John", LastName = "Doe", CellNumber = "123-456-789", SecondaryPhoneNumber = "98873213", Address = "1street 2",BirthDate = DateTime.Now.Date, Pesel = "312312312", Notes = "Annoying"},
             new Person{FirstName = "Anna", LastName = "Doe", CellNumber = "113-456-789", SecondaryPhoneNumber = "98873213", Address = "1street 2",BirthDate = DateTime.Now.Date, Pesel = "548555672", Notes = "Less Annoying"}
            };
            persons.ForEach(person => context.Persons.Add(person));
            context.SaveChanges();
            var meetings = new List<Meeting>{
                new Meeting{PersonId = 1, Body = "Body of meeting", Date = DateTime.Now}
            };
            meetings.ForEach(meeting => context.Meetings.Add(meeting));
            context.SaveChanges();
            var statuses = new List<Status> {
                new Status{Name = "OK"},
                new Status {Name = "NOT_OK"}
            };
            statuses.ForEach(status => context.Statuses.Add(status));
            context.SaveChanges();
        }
编辑:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace WebApplication2.Models {
    public class PersonInitializer : System.Data.Entity.DropCreateDatabaseIfModelChanges<PersonContext> {
        protected override void Seed(PersonContext context) {
            var persons = new List<Person> { 
             new Person{FirstName = "John", LastName = "Doe", CellNumber = "123-456-789", SecondaryPhoneNumber = "98873213", Address = "1street 2",BirthDate = DateTime.Now.Date, Pesel = "312312312", Notes = "Annoying"},
             new Person{FirstName = "Anna", LastName = "Doe", CellNumber = "113-456-789", SecondaryPhoneNumber = "98873213", Address = "1street 2",BirthDate = DateTime.Now.Date, Pesel = "548555672", Notes = "Less Annoying"}
            };
            persons.ForEach(person => context.Persons.Add(person));
            context.SaveChanges();
            var meetings = new List<Meeting>{
                new Meeting{PersonId = 1, Body = "Body of meeting", Date = DateTime.Now}
            };
            meetings.ForEach(meeting => context.Meetings.Add(meeting));
            context.SaveChanges();
            var statuses = new List<Status> {
                new Status{Name = "OK"},
                new Status {Name = "NOT_OK"}
            };
            statuses.ForEach(status => context.Statuses.Add(status));
            context.SaveChanges();
        }
    }
}

尝试替换

public class PersonInitializer :
   System.Data.Entity.DropCreateDatabaseIfModelChanges<PersonContext>

public class PersonInitializer :
   System.Data.Entity.DropCreateDatabaseAlways<PersonContext>

此代码将始终删除、重新创建和播种数据库。

PS:我认为配置中的初始化器是优先级。

最新更新