2015-04-14 4 views
1

Я создаю SQL View на моей конфигурации SeedEntity Framework Code First - T-SQL Views

protected override void Seed(QuiverContext context) 
{ 
    context.Database.ExecuteSqlCommand(DatabaseScripts.Views.MyView); 
} 

Теперь я хочу, чтобы добавить DBSet к моему DbContext, который представляет мой View. I read that one can do this, используя затем Entity, как обычный стол.

Так что я попробовал, но мне нужно добавить миграцию, которую я сделал, но тогда команда update-database не удается создать представление, поскольку сначала создается таблица.

+0

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

ответ

1

Похоже, вы пытаетесь создать представление в методе Seed. Это не способ создания представления (помните, что метод seed запускается каждый раз, когда выполняется ЛЮБАЯ миграция).

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

Вы можете выполнить пользовательские Sql внутри миграции с помощью команды Sql, например ...

Sql("CREATE VIEW myView....."); 

Если вы хотите, чтобы сделать вещи немного более надежным, вы можете create an extension for migrations, который позволяет вызывать CreateView.

+0

Ну, я все еще могу использовать '' seed'', мне просто нужно убедиться, что моя миграция '' Up'' ничего не делает. Наличие этой логики в '' seed'' имеет некоторые преимущества, так как все мои скрипты будут вместе (sp, views, триггеры), и каждый раз необходимо изменить эти сценарии. Мне не нужно загрязнять мои миграции. Но все-таки я понимаю, что у меня есть преимущество в миграции, большое вам спасибо. –

+0

Я обычно использую метод Sql для всех вещей, о которых вы упоминаете, - единственная причина, по которой я буду использовать Seed, - это то, что вам действительно нужно использовать EF, а не добавлять вещи, используя SQL. Ввод кода в миграцию означает, что вам не нужно беспокоиться о проверке их запуска. – Richard

Смежные вопросы