2014-01-28 2 views
0

У меня есть объект класса:Переопределение метода Seed в Entity Framework

public class Post 
    { 
    public int Id { get; set; } 
    public string Title { get; set; } 
    public string Content { get; set; } 
    } 

и я реализовал класс переопределить метод Seed так:

public class MyCustomInitialize : DropCreateDatabaseIfModelChanges<Context> 
{ 
    protected override void Seed(Context context) 
    { 
     context.Posts.Add(new Post() { Content = "This is a test", Id = 2, Title = "my subject" }); 
     context.Database.ExecuteSqlCommand("CREATE INDEX IX_title ON Blog (title)"); 
     base.Seed(context); 
    } 
} 

и в Program.cs:

Database.SetInitializer(new MyCustomInitialize()); 

, но когда я запускаю свою программу, запись, которую я хочу добавить в свою базу данных (с заголовком «моя тема»), она не вставляла мою БД и d Индекс тоже не создавался! в чем проблема?

ответ

0

Вам нужно вызвать SaveChanges в свой DbContext.

+1

В основе метода семян.Спид (контекст) сохранит изменения – pejman

+0

http://stackoverflow.com/questions/15389839/entity-framework-database-seed-doesnt-seed – amarano

+0

Также: http://msdn.microsoft .com/en-us/library/gg679410 (v = vs.113) .aspx – amarano

0

Звонок SetInitializer должен быть в вашем global.asax в событии Application_Start().

protected void Application_Start() 
{ 
    System.Data.Entity.Database.SetInitializer(new MyCustomInitialize()); 
} 

EDIT: Как Amarano говорит в своем ответе база данных не была обновлена ​​с новым «Post», потому что вы не вызвали SaveChanges ...

Что заставляет меня задаться вопросом, как вы осматривая ли индекс был применен?

Также вы должны позвонить

Context.Entry(TheTrackedEntityYouWantToUpdate).Reload(); 

Чтобы обновить локальный (в сущности памяти) после ExecuteSqlCommand вызова.

+0

Это консольное приложение Не веб-приложение – pejman

Смежные вопросы