Pull to refresh

Comments 4

Также благодарю за пост.
Было бы очень удобно еще создать атрибуты для свойств модели и генерировать нужный код в миграцию автоматически.Например:
public class Model{
     [ClusteredKey("ClusteredKeyName")]
     public int ModelID { get; set; }
     [Key("KeyName",KeyType.Asc)]
     public string Field1 { get; set; }
     .....
}

В EF 6.1 был добавлен атрибут IndexAttrubute, который делает то, о чем вы просите.

Если вдаться в детали, то это работает через добавление IndexAnnotation через IndexAttributeConvention, т.е. проходим по классу, находим атрибуты IndexAttribute и добавляем в соответствующие свойства необходимые аннотации (кстати, добавление атрибутов через Code First выглядит именно так).

Далее, на базе аннотаций EF определяет получившийся набор изменений и на базе этого набора генерируется код миграции.

Если мы хотим, чтобы генерировался код, для нашей пользовательской миграции, то здесь есть проблема. Она заключается в том, что генерация списка операций, которые необходимо добавить в миграцию происходит в классе System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer, который является внутренним и изменить его нельзя (надеюсь в одном из следующих релизов EF и это изменят).

В принципе, можно попытаться обойти это добавив собственный класс аннотаций и как-то попробовать их вычитывать в собственной реализации генератора кода CSharpMigrationCodeGenerator и потом подключить его в настройках миграций, но это необходимо проверять.
Понятно. Уверен, что в следующих версиях реализуют необходимый функционал.
Sign up to leave a comment.

Articles