MVC 3 EF Проблема кода с веб-хоста - PullRequest
3 голосов
/ 30 августа 2011

Я довольно новичок в ASP.NET MVC 3 и вообще в кодировании.

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

Я использую Entity Framework, и он отлично работает на моей локальной машине. Я ввел новую строку подключения, чтобы использовать удаленную базу данных, однако она не работает, во-первых, у меня есть одна база данных MSSQL, которую нельзя удалить и создать заново, поэтому я не могу использовать эту стратегию в своем инициализаторе, я попытался ввести в стратегию ноль, но безрезультатно, мои таблицы просто не создаются в моей базе данных, и в этом проблема, я не знаю, как мне это сделать с помощью Entity Framework.

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

Я мог бы, вероятно, заставить его работать через ручное воссоздание таблиц, но я хочу узнать решение через codefirst.

Это мой класс инициализатора

public class EntityInit : DropCreateDatabaseIfModelChanges<NewsContext>
{
    private NewsContext _db = new NewsContext();


    protected override void Seed(NewsContext context)
    {
        new List<News>
        {
            new News{ Author="Michael Brandt", Title="Test News 1 ", NewsBody="Bblablabalblaaaaa1" },
            new News{ Author="Michael Brandt", Title="Test News 2 ", NewsBody="Bblablabalblaaaaa2" },
            new News{ Author="Michael Brandt", Title="Test News 3 ", NewsBody="Bblablabalblaaaaa3" },
            new News{ Author="Michael Brandt", Title="Test News 4 ", NewsBody="Bblablabalblaaaaa4" },
        }.ForEach(a => context.News.Add(a));


        base.Seed(context);
    }
}

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

Ответы [ 2 ]

2 голосов
/ 30 августа 2011

Стратегии инициализации на данный момент не поддерживают стратегии обновления.

Для инициализации новой базы данных следует использовать стратегии инициализации. все последующие изменения должны быть сделаны с использованием сценариев на данный момент.

Лучшая практика, как мы говорим, - модифицировать базу данных с помощью скрипта, а затем вручную откорректировать код, чтобы отразить это изменение.

в будущих выпусках будут доступны стратегии обновления / миграции.


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

public class Initializer : IDatabaseInitializer<MyContext>
        {
            public void InitializeDatabase(MyContext context)
            {
                if (!context.Database.Exists() || !context.Database.CompatibleWithModel(false))
                {
                    context.Database.Delete();
                    context.Database.Create();
                    var jobInstanceStateList = EnumExtensions.ConvertEnumToDictionary<JobInstanceStateEnum>().ToList();
                    jobInstanceStateList.ForEach(kvp => context.JobInstanceStateLookup.Add(
                        new JobInstanceStateLookup()
                            {
                                JobInstanceStateLookupId = kvp.Value,
                                Value = kvp.Key
                            }));

                    context.SaveChanges();
                }          
            }
        }

Вы пытались использовать CreateDatabaseOnlyIfNotExists

- Каждый раз, когда контекст инициализируется, база данных будет воссоздана, если она не существует.

Инициализатор базы данных можно установить с помощью метода SetInitializer класса Database. Если ничего не указано, он будет использовать класс CreateDatabaseOnlyIfNotExists для инициализации базы данных.

Database.SetInitializer(null);

-

Database.SetInitializer<NewsContext>(new CreateDatabaseOnlyIfNotExists<NewsContext>());

Я не уверен, является ли это точным синтаксисом, поскольку я не писал это некоторое время. Но это должно быть очень похоже.

0 голосов
/ 30 августа 2011

Если вы используете очень маленькое приложение, вы можете перейти на SQL CE 4.0.
Развертывание bin должно позволять вам запускать SQL CE 4.0, даже если у вашего провайдера нет установленных для него двоичных файлов. Вы можете узнать больше здесь .

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

может это помочь?

...