我正在使用带有Entity Framework 6和MSSQL Server的C#。 我试图将数据插入包含现有历史数据的表中。 下面是代码片段,但是我收到了DbUpdateException"违反主键约束"。 我检查了SQL表和EDMX,两者都有正确的ID列作为Identity列。 此外,EDMX的SSDL和CSDL使用" identity"正确设置。
更新:SQL表已有数据,但SaveChanges()尝试插入此表,其标识从0开始,忽略现有数据,导致此PK约束违规错误。
请协助。
public int PersistEntity(T entity)
{
var newRecords = 0;
using (var context = new myEntities())
{
using (var dbcontext = context.Database.BeginTransaction())
{
var entity = new tblEntity();
// ...
context.tblEntities.Add(entity);
//context.tblEntities.Attach(entity); // also tried this without success.
try
{
newRecords = context.SaveChanges();
dbcontext.Commit();
}
catch (DbUpdateException)
{
throw; // thrown on context.SaveChanges()
}
}
}
return newRecords;
}
以下是tblEntity的代码:
namespace MyLibrary.Infrastructure.Data
{
using System;
using System.Collections.Generic;
public partial class tblEntity
{
public tblEntity()
{
this.tblCalibrations = new HashSet<tblCalibration>();
this.tblOutput = new HashSet<tblOutput>();
}
public int iID { get; set; }
public string cPlateName { get; set; }
public int iInstrument { get; set; }
public int iStatus { get; set; }
public int iTest { get; set; }
public virtual tblTest tblTest { get; set; }
public virtual ICollection<tblCalibration> tblCalibrations { get; set; }
public virtual tblInstrument tblInstrument { get; set; }
public virtual ICollection<tblOutput> tblOutput { get; set; }
public virtual tblStatus tblStatus { get; set; }
}
}