.NET Entity Framework中第二次调用SaveChanges时发生InvalidOperationException

时间:2019-07-11 15:41:34

标签: c# asp.net database entity-framework

我正在将Excel文件上传到数据库。第一次上传没问题。在第二次上载时正在更新数据库,但出现错误。

这是上传Excel数据的代码:

let transformedFrame = CGRect(origin: scaledOrigin, size: scaledSize).applying(CGAffineTransform(rotationAngle: radians))

ctx.translateBy(x: transformeedFrame.width/2, y: transformedFrame.height/2)
ctx.rotate(by: radians)

fxOrigin.x -= transformedFrame.width/2
fxOrigin.y -= transformedFrame.height/2

MyModel.Context.cs:

public void ImportData(String conString)
{
        string query = "Select [Donem],[Marka],[Tuketim] from [Sheet1$]";
        OleDbConnection con = new OleDbConnection(conString);

        if (con.State == System.Data.ConnectionState.Closed)
        {
            con.Open();
        }

        OleDbCommand cmd = new OleDbCommand(query, con);
        OleDbDataAdapter da = new OleDbDataAdapter(cmd);

        DataSet ds = new DataSet();
        da.Fill(ds);
        da.Dispose();
        con.Close();
        con.Dispose();

        context.Database.ExecuteSqlCommand("TRUNCATE TABLE [CSProjectTable]");

        foreach (DataRow dr in ds.Tables[0].Rows)
        {
            context.CSProjectTables.Add(new CSProjectTable
            {
                Donem = Convert.ToDouble(dr["Donem"]),
                Marka = dr["Marka"].ToString(),
                Tuketim = Convert.ToDouble(dr["Tuketim"])
            });
        }

        context.SaveChanges();
}

我的edmx文件和SSDL部分具有public partial class CSProjectDatabaseEntities : DbContext { public CSProjectDatabaseEntities () : base("name=CSProjectDatabaseEntities ") { } protected override void OnModelCreating(DbModelBuilder modelBuilder) { throw new UnintentionalCodeFirstException(); } public DbSet<CSProjectTable> CSProjectTables { get; set; } }

StoreGeneratedPattern="Identity"

我收到此错误:

  

System.InvalidOperationException:'已成功提交对数据库的更改,但是在更新对象上下文时发生错误。 ObjectContext可能处于不一致状态。内部异常消息:由于多个“ DatabaseLayer.CSProjectTable”类型的实体具有相同的主键值,因此保存或接受更改失败。确保显式设置的主键值是唯一的。确保在数据库和实体框架模型中正确配置了数据库生成的主键。将实体设计器用于数据库优先/模型优先配置。使用“ HasDatabaseGeneratedOption”流利的API或“ DatabaseGeneratedAttribute”进行代码优先配置。

0 个答案:

没有答案