Изменить модель после создания базы данных только на коде EF4

Привет, извините за мой плохой английский ... Используя только код EF4, я создал несколько классов POCO, и моя база данных была сгенерирована на их основе. Все работало нормально, я вставил некоторые данные в таблицы, но теперь мне нужно создать новое свойство для одного из моих классов. Если я просто создаю его, приложение выдаст мне исключение: {"Модель, поддерживающая контекст 'TestContext', изменилась с момента создания базы данных. Либо вручную удалите / обновите базу данных, либо вызовите Database.SetInitializer с IDatabaseInitializer Например, стратегия RecreateDatabaseIfModelChanges автоматически удалит и воссоздает базу данных, а также при необходимости заполнит ее новыми данными. "}

Я попытался вручную создать поле в таблице, но он все еще жалуется ... Кто-нибудь знает, есть ли способ, и если да, то как я могу вручную обновить схему базы данных (я не хотите воссоздать его, потому что у меня уже есть данные) в соответствии с моделью?


person Leo    schedule 01.11.2010    source источник


Ответы (2)


Он должен работать, если вы убедитесь, что ваш новый столбец точно соответствует вашему новому свойству.

Например, если вы добавите свойство NewProp

public class MyEntity
{
    [Key]
    public int Id;

    public string PropA;
    public int PropB;

    public int NewProp;

}

затем в таблице базы данных MyEntities вы должны добавить столбец NewProp типа int not null.

Что вы можете сделать, чтобы проверить, правильный ли столбец, который вы добавляете, - это переименовать вашу базу данных, а затем позволить Code-First воссоздать базу данных и посмотреть, чем отличается исходная и новая базы данных.

person Christian Lavallee    schedule 02.11.2010
comment
Спасибо, Кристиан, я уже пытался это сделать, но проблема все еще возникала, потому что я использовал CreateDatabaseOnlyIfNotExists, а не null в Database.SetInitializer: / - это отсутствующее звено. Но ваш ответ подсказывает мне, что я искал не в том месте :) - person Leo; 02.11.2010

EF генерирует частичные классы. Таким образом, вы можете добавлять новые свойства (поля) в другой частичный класс.

person Tom Vervoort    schedule 01.11.2010
comment
Том, возможно, я неправильно выразился ... У меня нет проблем с изменением классов, и я использую только код (без edmx, см. blogs.msdn.com/b/efdesign/archive/2009/06/10/code-only.aspx). Я хочу знать, как я могу вручную обновить базу данных, чтобы она соответствовала моим классам POCO, потому что после создания базы данных каждое изменение в классах дает мне указанное выше исключение: / - person Leo; 02.11.2010