Остановить Entity Framework от изменения базы данных - PullRequest
37 голосов
/ 10 февраля 2012

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

Прямо сейчас это выглядит так, как когда я запускаю свое приложение, оно пытаетсясоздать базу данных.

Я не хочу, чтобы структура сущностей когда-либо изменяла мою базу данных.Нет, никогда.Даже не пытайся.Это действительно не так сложно изменить базы данных;Я чувствовал бы себя намного комфортнее, если бы сделал это сам.Мне не нужен фреймворк, чтобы держать меня за руку при проектировании базы данных.

Могу ли я сказать фреймворку прекратить попытки изменить мою базу данных?Я очень неохотно сейчас использую код сначала, поскольку тот факт, что он пытается изменить мою базу данных, довольно пугающий.Даже в процессе разработки я никогда не хочу, чтобы это произошло.

Мне не повезло?

Ответы [ 4 ]

56 голосов
/ 10 февраля 2012

Если вы не хотите, чтобы EF создавал вашу базу данных, вы можете отключить инициализатор базы данных:

public class SchoolDBContext: DbContext 
{
    public SchoolDBContext() : base("SchoolDBConnectionString")
    {            
        //Disable initializer
        Database.SetInitializer<SchoolDBContext>(null);
    }
    public DbSet<Student> Students { get; set; }
    public DbSet<Standard> Standards { get; set; }
}

См. http://www.entityframeworktutorial.net/code-first/turn-off-database-initialization-in-code-first.aspx

4 голосов
/ 10 февраля 2012

Если вы хотите использовать EF, но никогда не изменяете базу данных, то вам, вероятно, сначала не нужен код.Возможно, вам сначала нужно что-то более похожее на базу данных.

http://blogs.msdn.com/b/adonet/archive/2011/03/15/ef-4-1-model-amp-database-first-walkthrough.aspx

Ссылки из комментариев:
http://automapper.codeplex.com/
Начало работы с AutoMapper

edit: я неправильно понял цель, вы должны сослаться на этот ответ, где был дан следующий правильный код:

Если вы не хотите, чтобы EFсоздать свою базу данных, вы можете отключить инициализатор базы данных

Database.SetInitializer<MyContext>(null);
2 голосов
/ 10 февраля 2012

Когда вы объявляете, что инициализируете, используйте базовый класс:

public class DatabaseInitialiser : CreateDatabaseIfNotExists<MyContext>

вместо:

public class DatabaseInitialiser : RecreateDatabaseIfModelChanges<MyContext>

Или если вы используете:

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

замените это на:

Database.SetInitializer<MyContext>(new CreateDatabaseIfNotExists<MyContext>);
1 голос
/ 10 февраля 2012

Поскольку код первый в значительной степени точно соответствует тому, что вы описываете, я не понимаю ваш вопрос.

Если вы не хотите, чтобы EF возился с вашей базой данных, то создаст модель из вашей существующей базы данных.

...