Вы можете использовать библиотеку FenixRepo (также можно использовать как nuget package), чтобы создать определенную таблицу, которая является частью вас Context
.Прежде всего, вы должны позвонить один раз при запуске static
Initialize
, где первый аргумент - это заводский метод, который возвращает экземпляр вашего Context
, а второй - экземпляр Configuration
class
. Он подготовит SQL-скрипты для всех ваших таблиц, зарегистрированных на вашем Context
. В случае ASP.NET MVC это хорошее решение, чтобы вставить этот код в Global.asax:
FenixRepositoryScriptExtractor.Initialize(() => new Context(), new Configuration());
Затем вы можете создать таблицу требуемого типа MyTable
таким простым способом:
var repo = new FenixRepositoryCreateTable<MyTable>();
//or repo = new FenixRepository<MyTable>();
repo.CreateTable();
Кроме того, если таблица распределена между несколькими миграциями, и у них нет ничего, что соответствует другим таблицам, вы можете указать эти миграции (то есть имена классов из папки Migrations) через FenixAttribute
, и именно они будут использоваться в качестве источника SQL-скриптов, которые будут использоваться для создания таблицы:
[Fenix(nameof(Initial), nameof(MyTableFirstMigration), nameof(MyTableSecondMigration))]
public class MyTable
{
//some stuff
}
Без этого атрибута библиотека будет использовать по умолчанию скриптов. Всегда лучше указывать миграцию, потому что в противном случае не гарантируется, что все индексы будут созданы, а также в ваши миграции вы можете включить какой-то пользовательский код, который не будет выполнен в случае по умолчанию.
Библиотека совместима и протестирована с использованием EF 6.1.3 в случае MS SQL.
Хм, что, я полагаю, следует вставить в строку подключения, если для нее нет исходной базы данных? Я просто удаляю из него исходный фрагмент каталога и получаю такое же недопустимое имя объекта «dbo.Movies». – Pieces
Строка подключения сообщает, где создать базу данных. Он не должен существовать. Он обнаружит, что он не существует, а затем попытается создать его, если он этого не сделает. Если у него есть правильные разрешения, все будет создано отлично. Я думаю, что если вы удалите базу данных и сохраните одну и ту же строку соединения, тогда все будет работать так, как вы хотите. – Dismissile
О, огромное спасибо! Последний вопрос, какой метод вы бы порекомендовали помещать в Database.SetInitializer. У меня возникла ошибка, из-за которой он не мог отбросить базу данных, потому что она использовалась. Я бы предположил, что приложение само по себе. Еще раз спасибо, мы с моим другом много времени искали, пытаясь понять проблему, и никогда бы не догадались, что база данных не должна создаваться. – Pieces