entity-framework - update - how to use entity framework migrations




Уникальное ограничение с Entity Framework с использованием кода First Migrations (2)

Вы можете просто создать новую миграцию, используя команду Add-Migration из консоли диспетчера пакетов. После создания пустой миграции в методе Up вы можете использовать метод CreateIndex класса DbMigration для создания нового индекса. Это будет выглядеть примерно так:

CreateIndex("dbo.Accounts", "AccessKey", unique: true);

Я делаю миграцию кода платформы лица (v 5) в приложении MVC 4. Я хотел бы добавить уникальное ограничение на уровне базы данных.

Я знаю, что это можно сделать при создании таблицы, но у меня уже есть таблица. http://msdn.microsoft.com/en-US/data/jj591621

Я пробовал следующее, помеченный как ответ: уникальное ограничение с EFCodeFirst и SqlCe4

Мой контекст базы данных немного отличается, я предоставляю имя подключения следующим образом

public AppDatabaseContext() : base("MyConnectionDBContext")

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

protected override void Seed(AppDatabaseContext context)

Я также попробовал следующее: http://romiller.com/2010/07/31/ef-ctp4-tips-tricks-running-additional-ddl/

Я не использовал вложенный класс, потому что мне казалось, что мне нужно было зарегистрировать инициализатор через app.config. Я не мог заставить его работать при инициализации в коде. Вызывается InitializeDatabase, но следующее условие никогда не выполняется:

(!context.Database.Exists() || !context.Database.ModelMatchesDatabase())

Это потому, что это происходит после запуска миграций ...

Я также попробовал это на одном этапе: уникальное ограничение в коде Entity Framework Во-первых , это была та же проблема, что и раньше, это условие никогда не возвращалось как истинное.

В идеале я хотел бы включить некоторые стандартные SQL в мой файл миграции. Есть способ сделать это? Если нет, где я могу увидеть, как добиться этого с помощью кода первой миграции?

Спасибо!

ОБНОВИТЬ:

Есть ли причина, по которой я не могу использовать функцию SQL?

 public override void Up()
 {
        AddColumn("Posts", "Abstract", c => c.String());

        Sql("UPDATE Posts SET Abstract = LEFT(Content, 100) WHERE Abstract IS NULL");
 }

Очевидно, используя правильный SQL ...


Начиная с EF 6.1, теперь вы можете сделать это в вашей модели с

атрибут

 [Index("IX_UniqueName", IsUnique = true)]
 public string Name {get;set;}

или свободно

Property(s => s.Name).HasColumnAnnotation(IndexAnnotation.AnnotationName,
    new IndexAnnotation(
        new IndexAttribute("IX_UniqueName") { IsUnique = true }));

Свободный метод не идеален, как его безумная многословная IMO, но, по крайней мере, сейчас это возможно.

Больше блогов в блоге Артура Викерса http://blog.oneunicorn.com/2014/02/15/ef-6-1-creating-indexes-with-indexattribute/





code-first