В моем случае было сгенерировано исключение, потому что EF неправильно создал миграцию.
Он пропустил установку идентификатора : true во второй таблице. Так что перейдите к миграциям, которые создали соответствующие таблицы, и проверьте, не пропустили ли вы добавление идентификатора.
CreateTable(
"dbo.LogEmailAddressStats",
c => new
{
Id = c.Int(nullable: false, identity: true),
EmailAddress = c.String(),
})
.PrimaryKey(t => t.Id);
CreateTable(
"dbo.LogEmailAddressStatsFails",
c => new
{
Id = c.Int(nullable: false), // EF missed to set identity: true!!
Timestamp = c.DateTime(nullable: false),
})
.PrimaryKey(t => t.Id)
.ForeignKey("dbo.LogEmailAddressStats", t => t.Id)
.Index(t => t.Id);
Столбец Id должен иметь идентичность (то есть автоинкремент!), Поэтому это должна быть ошибка EF.
Вы можете добавить идентификатор вручную с помощью SQL непосредственно в базу данных, но я предпочитаю использовать Entity Framework.
Если вы столкнетесь с той же проблемой, я увижу два простых решения :
Доп. 1
отменить неправильно созданную миграцию с помощью
update-database -target:{insert the name of the previous migration}
Затем вручную добавьте идентификатор : true в код миграции и затем update-database снова.
Доп. 2
вы создаете новую миграцию, которая добавляет личность. Если у вас нет изменений в моделях, и вы запускаете
add-migration identity_fix
это создаст пустую миграцию. Затем просто добавьте это
public partial class identity_fix : DbMigration
{
public override void Up()
{
AlterColumn("dbo.LogEmailAddressStatsFails", "Id", c => c.Int(nullable: false, identity: true));
}
public override void Down()
{
AlterColumn("dbo.LogEmailAddressStatsFails", "Id", c => c.Int(nullable: false));
}
}