Остановить Entity Framework от изменения базы данных
Я начинаю играть с кодовым подходом к структуре сущности, прежде всего, чтобы я мог украсить свои свойства аннотациями для отображения в моем представлении (в противном случае, прямо сейчас я должен создать класс, который почти идентичный той, которая была создана для меня только для того, чтобы я мог добавлять аннотации, а затем копировать данные из одного объекта в следующий).
Прямо сейчас, похоже, когда я запускаю свое приложение, он пытается создать базу данных.
Я не хочу, чтобы инфраструктура сущности когда-либо меняла мою базу данных. Нет. Никогда. Даже не пытайтесь. На самом деле не так уж сложно изменить базы данных; Мне было бы гораздо комфортнее, если бы я сам это сделал. Мне не нужна инфраструктура, чтобы держать меня за руку при разработке базы данных.
Могу ли я сказать, что среда перестает пытаться изменить мою базу данных? Я очень не решаюсь использовать код сначала, поскольку тот факт, что он пытается изменить мою базу данных, довольно пугает. Даже в развитии я никогда не хочу, чтобы это произошло.
Мне повезло?
Ответы
Ответ 1
Если вы не хотите, чтобы 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
Ответ 2
Если вы хотите использовать 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);
Ответ 3
Когда вы объявляете, что вы инициализатор, используйте базовый класс:
public class DatabaseInitialiser : CreateDatabaseIfNotExists<MyContext>
а не:
public class DatabaseInitialiser : RecreateDatabaseIfModelChanges<MyContext>
Или, если вы используете:
Database.SetInitializer<MyContext>(new RecreateDatabaseIfModelChanges<MyContext>);
замените это на:
Database.SetInitializer<MyContext>(new CreateDatabaseIfNotExists<MyContext>);
Ответ 4
Так как code first в значительной степени точно выполняет то, что вы описываете, я не понимаю ваш вопрос.
Если вы не хотите, чтобы EF возился с вашей базой данных, сгенерируйте модель из существующей базы данных.