实体框架6插入表中,现有数据抛出DbUpdateException

时间:2014-10-23 11:45:45

标签: c# entity-framework-6

我正在使用带有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; }
    }
}

0 个答案:

没有答案