Изменение имени первичного ключа в EF6

Когда я создаю файл миграции в Azure .Net Backend, он автоматически создает пять обязательных полей (Id, CreatedAt, UpdatedAt, Version, Deleted) с моими пользовательскими полями. Он определяет идентификатор как первичный ключ.

public override void Up()
    {
        CreateTable(
            "dbo.People",
            c => new
                {
                    Id = c.String(nullable: false, maxLength: 128,
                        annotations: new Dictionary<string, AnnotationValues>
                        {
                            { 
                                "ServiceTableColumn",
                                new AnnotationValues(oldValue: null, newValue: "Id")
                            },
                        }),
                    PersonType = c.String(nullable: false, maxLength: 2),
                    FirstName = c.String(nullable: false, maxLength: 50),
                    MiddleName = c.String(maxLength: 50),
                    LastName = c.String(nullable: false, maxLength: 50),
                    Gender = c.String(nullable: false, maxLength: 1),
                    BirthDate = c.DateTime(nullable: false, storeType: "date"),
                    Version = c.Binary(nullable: false, fixedLength: true, timestamp: true, storeType: "rowversion",
                        annotations: new Dictionary<string, AnnotationValues>
                        {
                            { 
                                "ServiceTableColumn",
                                new AnnotationValues(oldValue: null, newValue: "Version")
                            },
                        }),
                    CreatedAt = c.DateTimeOffset(nullable: false, precision: 7,
                        annotations: new Dictionary<string, AnnotationValues>
                        {
                            { 
                                "ServiceTableColumn",
                                new AnnotationValues(oldValue: null, newValue: "CreatedAt")
                            },
                        }),
                    UpdatedAt = c.DateTimeOffset(precision: 7,
                        annotations: new Dictionary<string, AnnotationValues>
                        {
                            { 
                                "ServiceTableColumn",
                                new AnnotationValues(oldValue: null, newValue: "UpdatedAt")
                            },
                        }),
                    Deleted = c.Boolean(nullable: false,
                        annotations: new Dictionary<string, AnnotationValues>
                        {
                            { 
                                "ServiceTableColumn",
                                new AnnotationValues(oldValue: null, newValue: "Deleted")
                            },
                        }),
                })
            .PrimaryKey(t => t.Id)
            .Index(t => t.CreatedAt, clustered: true);

    }

Я хочу изменить это имя первичного ключа «Id» на «PersonId», поэтому я добавляю свойство первичного ключа, как показано ниже.

 public class Person : EntityData
{
    public string PersonId;
    ....
}

Но это не сработало. «Id» не был заменен на «PersonId», а просто добавлен как поле клиента в файл миграции. Итак, я добавил атрибут [Key], но он сделал ошибку, и я получил сообщение ниже.

«Невозможно определить порядок составных первичных ключей для типа . Используйте метод ColumnAttribute или HasKey, чтобы указать порядок составных первичных ключей».

Как я могу изменить имя первичного ключа?


person Kevin Ko    schedule 08.05.2016    source источник
comment
Вы должны добавить код миграции вручную для переименованных столбцов.   -  person Gert Arnold    schedule 08.05.2016


Ответы (1)


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

Например,

modelBuilder.Entity<Person>().HasKey(t => t.PersonId);

Он установит PersonId в качестве первичного ключа.

Удачи.

person user689072    schedule 09.05.2016