0

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

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, чтобы указать порядок для составных первичных ключей».

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

+0

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

ответ

1

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

Например,

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

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

Удачи.

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