Entity Framework Code Первая проблема отображения отношений - PullRequest
2 голосов
/ 22 марта 2011

Кто-нибудь может сказать мне реальную выгоду от сохранения метаданных модели Entity Framework в таблице базы данных (это делается с использованием соглашения по умолчанию)?

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Conventions.Remove<IncludeMetadataConvention>();
}

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

Я использую только код.

Спасибо!

Ответы [ 2 ]

1 голос
/ 22 марта 2011

Это создаст таблицу EdmMetadata, которая содержит хэш текущей модели.Каждый раз, когда вы создаете экземпляр своего производного DbContext и хотите получить доступ к базе данных, контекст выполняет специальный запрос для получения сохраненного хэша.Затем контекст сравнивает хеш текущей модели с найденной.Если хеш отличается, он выполняет инициализатор базы данных или запускает исключение.При использовании этой функции вы можете, например, определить инициализатор:

Database.SetInitializer(new DropCreateDatabaseIfModelChanges<MyComtext>());

Этот инициализатор удалит базу данных и создаст новую, если модель изменится.Это значительно упрощает разработку кода, но вы не должны использовать его в производстве.Вы также можете получить инициализатор и создать собственный метод с переопределением Seed.Вы можете использовать Seed метод для инициализации вашей базы данных.

1 голос
/ 22 марта 2011

Это очень важно для расширяемости и ремонтопригодности приложения. Он предоставляет функциональность для EF, чтобы замечать изменения схемы и соответственно изменять базу данных. Поэтому вы можете изменить код модели, не беспокоясь об обновлении базы данных.

Если вы точно знаете, что никогда не измените структуру модели, вы можете удалить ее.

...