Я пытаюсь обновить первичный ключ моей таблицы как целочисленный идентификатор автоинкремента.EF 6 Code First - Целочисленный первичный ключ - Невозможно вставить значение NULL в столбец
Это моя сущность:
public class Reservation
{
public int Id { get; set; }
public ReservationStatus Status { get; set; }
public string Name { get; set; }
public string CustomerName { get; set; }
...
}
Это мой OnModelCreating метод:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
...
modelBuilder.Entity<Reservation>()
.HasKey(e => e.Id)
.Property(e => e.Id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
...
}
Это генерируемый миграция:
public partial class Reservations_AlterKey_Id_AutoIncrement : DbMigration
{
public override void Up()
{
DropPrimaryKey("dbo.Reservations");
AlterColumn("dbo.Reservations", "Id", c => c.Int(nullable: false, identity: true));
AlterColumn("dbo.Reservations", "CustomerTaxCode", c => c.String());
AddPrimaryKey("dbo.Reservations", "Id");
}
public override void Down()
{
DropPrimaryKey("dbo.Reservations");
AlterColumn("dbo.Reservations", "CustomerTaxCode", c => c.String(nullable: false, maxLength: 128));
AlterColumn("dbo.Reservations", "Id", c => c.Int(nullable: false));
AddPrimaryKey("dbo.Reservations", new[] { "Id", "DeviceId", "CustomerTaxCode" });
}
}
Когда я пытаюсь вставить новое резервирование (после обновления базы данных) следующее исключение i сбрасывается:
Невозможно вставить значение NULL в столбец «Id», таблицу «xxxxx.dbo.Reservations»;
Это то, что я вижу в свойствах колонки от дизайнера (Visual Studio 2015):
"Является ли идентичность" еще ложь.
Как я могу это решить?
Заранее спасибо
Вы пытались добавить эти атрибуты в свойство 'Id' в классе' Reservation' вместо [fluent] (https://msdn.microsoft.com/en-us/data/jj591617.aspx) style: '[DataMember, Key, DatabaseGenerated (DatabaseGeneratedOption.Identity)]'. Вы пытались удалить таблицы для отдыха? –
Да, все тот же. Я замечаю, что если я удалю все миграции, воссоздайте один перенос, а затем воссоздав спецификацию идентификатора базы данных, как и ожидалось. Я хотел бы избежать воссоздать базу данных, потому что уже есть производственная версия, и я не буду удалять данные al :(Любое предложение? – Androidian
Вместо перегрузки OnModelCreation попробуйте добавить к ключевому ключу атрибут [Key] и посмотреть, это сработает, что поможет сузить возможные проблемы. – Licht