Я создаю приложение 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.