Ошибка после изменения первичного ключа в Entity Framework - PullRequest
0 голосов
/ 14 января 2019

Я создаю приложение WPF с использованием .NET 4.5 и Entity Framework 6.0 для сопоставления объектов C # с базой данных SQL Server 2008. Я получаю System.Data.Entity.Infrastructure.DbUpdateException, как это:

SqlException: имя столбца 'InstructionID' указано более одного раза в предложении SET

Исключение относится к каждому свойству / столбцу в целевой таблице, и оно появилось только после того, как я отбросил и заново создал таблицу целевой базы данных для использования первичного ключа на основе идентификатора int после первоначального определения первичного ключа как varchar тип данных.

Мои исходные класс и таблица C # были следующими. Эта конфигурация работала без ошибок:

public class UnitInstruction 
{
    [Key] public string instructionID { get; set; }
    public int? unitID { get; set; }
    public string propertyOne { get; set; }
    public string propertyTwo { get; set; }
}

public class UnitInstructionMap : EntityTypeConfiguration<UnitInstruction>
{
    public UnitInstructionMap()
    {
        ToTable("UnitInstructions");
        HasKey(i => i.InstructionID);
        Property(i => i.InstructionID).HasColumnName("InstructionID");
        Property(i => i.UnitID).HasColumnName("UnitID");
        Property(i => i.PropertyOne).HasColumnName("PropertyOne");
        Property(i => i.PropertyTwo).HasColumnName("PropertyTwo");
    }
}


CREATE TABLE [RealEstate].[UnitInstructions](
    [InstructionID] [varchar](20) NOT NULL,
    [UnitID] [int] NULL,
    [PropertyOne] [varchar](10) NULL,
    [PropertyTwo] [varchar](250) NULL,
 CONSTRAINT [PK_CommercialRealEstate.RetailUnitInstructions] PRIMARY KEY CLUSTERED 
(
    [InstructionID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

Ошибки случаются с этой версией ...

public class UnitInstruction {
    [Key] public int id { get; set; }
    public string instructionID { get; set; }
    public int? unitID { get; set; }
    public string propertyOne { get; set; }
    public string propertyTwo { get; set; }
}


public class UnitInstructionDbContext : DbContext
{
    public DbSet<UnitInstruction> UnitInstructions { get; set; }
    public UnitInstructionDbContext() : base(ConfigurationManager.ConnectionStrings["MyDB"].ConnectionString)
    {
        Database.SetInitializer<UnitInstructionDbContext>(null);
    }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.HasDefaultSchema("RealEstate");
        modelBuilder.Configurations.Add(new UnitInstructionMap());
        base.OnModelCreating(modelBuilder);
    }
}

public class UnitInstructionMap : EntityTypeConfiguration<UnitInstruction>
{
    public UnitInstructionMap()
    {
        ToTable("UnitInstructions");
        HasKey(i => i.ID);
        Property(i => i.InstructionID).HasColumnName("InstructionID");
        Property(i => i.UnitID).HasColumnName("UnitID");
        Property(i => i.PropertyOne).HasColumnName("PropertyOne");
        Property(i => i.PropertyTwo).HasColumnName("PropertyTwo");
    }
}


CREATE TABLE [RealEstate].[UnitInstructions](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [InstructionID] [varchar](20) NULL,
    [UnitID] [int] NULL,
    [PropertyOne] [varchar](10) NULL,
    [PropertyTwo] [varchar](250) NULL,
 CONSTRAINT [PK_CommercialRealEstate.RetailUnitInstructions] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

Есть ли какой-либо скрытый файл, который также необходимо обновить в EF, чтобы новая конфигурация работала? Я редактирую код только в VS2017, без использования каких-либо инструментов моделирования, мастеров и т. Д. В среде IDE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...