2016-03-30 2 views
0

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

namespace DataAccess.Migrations 
{ 
    using System.Data.Entity.Migrations; 

    public partial class init : DbMigration 
    { 
     public override void Up() 
     { 
      CreateTable(
       "dbo.SchoolclassCodes", 
       c => new 
        { 
         Schoolclass = c.Int(nullable: false, identity: true), 
         Type = c.String(), 
        }) 
       .PrimaryKey(t => t.Schoolclass); 

     } 

     public override void Down() 
     { 
      DropTable("dbo.SchoolclassCodes"); 
     } 
    } 
} 

Свойство schoolclass имеет тип данных целого и первичного ключа.

У меня уже есть данные, заполненные в таблице schoolclassCode.

Теперь я изменил тип данных от целого в строку и создал другую миграцию:

namespace DataAccess.Migrations 
{ 
    using System; 
    using System.Data.Entity.Migrations; 

    public partial class changedatattypeandaddedkeyId : DbMigration 
    { 
     public override void Up() 
     { 
      DropPrimaryKey("dbo.SchoolclassCodes"); 
      AddColumn("dbo.SchoolclassCodes", "Id", c => c.Int(nullable: false, identity: true)); 
      AlterColumn("dbo.SchoolclassCodes", "Schoolclass", c => c.String()); 
      AddPrimaryKey("dbo.SchoolclassCodes", "Id"); 
     } 

     public override void Down() 
     { 
      DropPrimaryKey("dbo.SchoolclassCodes"); 
      AlterColumn("dbo.SchoolclassCodes", "Schoolclass", c => c.Int(nullable: false, identity: true)); 
      DropColumn("dbo.SchoolclassCodes", "Id"); 
      AddPrimaryKey("dbo.SchoolclassCodes", "Schoolclass"); 
     } 
    } 
} 

Когда я бегу update-database я получаю исключение, что несколько столбцов идентичности, не допускаются к столу ,

Но у меня нигде не определено несколько ключей.

Кто-нибудь знает, как это решить?

+1

Это известная проблема - вам нужно будет обновить таблицу. См. Ответ Get's здесь: http://stackoverflow.com/questions/20153233/cant-remove-identity-attribute-from-pk –

ответ

0

Попробуйте переставить

AlterColumn("dbo.SchoolclassCodes", "Schoolclass", c => c.String()); 

выше

AddColumn("dbo.SchoolclassCodes", "Id", c => c.Int(nullable: false, identity: true)); 

Так

public override void Up() 
{ 
     DropPrimaryKey("dbo.SchoolclassCodes"); 
     AlterColumn("dbo.SchoolclassCodes", "Schoolclass", c => c.String()); 
     AddColumn("dbo.SchoolclassCodes", "Id", c => c.Int(nullable: false, identity: true)); 
     AddPrimaryKey("dbo.SchoolclassCodes", "Id"); 
} 
+0

Я пробовал все виды переупорядочения методов миграции, и ваше предложение возвращает это: Не удалось создать атрибут IDENTITY на nullable column 'schoolclass', Но где нулевой столбцы столбца «школьный класс» и столбец первичного ключа? DropPrimaryKey выполняется до метода AlterColumn !!! Это нелогично! – Elisabeth

+0

Я исправлю: «... столбец первичного ключа?» – Elisabeth

+0

Это не сработает, если у вас уже есть поле идентификации, если вы не воссоздаете таблицу. –

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