当我单击按钮时,我需要在SQL Server中保存相同的值。为了我的需要,我使用这个函数:
private void AggiornaVersioneCappario()
{
try
{
if (modelCap.AZCPR00F.Count() > 0)
{
modelCap.Database.ExecuteSqlCommand("TRUNCATE TABLE [AZCPR00F]");
modelCap.Database.ExecuteSqlCommand("DBCC CHECKIDENT('AZCPR00F', RESEED, 0);");
modelCap.AZCPR00F.Local.Clear();
}
StreamReader reader = new StreamReader(str_azcpr00f);
string contents;
while ((contents = reader.ReadLine()) != null)
{
AZCPR00F verCap = new AZCPR00F();
verCap.CPRVER = contents.Substring(1, 5);
verCap.CPRDDE = contents.Substring(7, 8);
verCap.CPRDSC = contents.Substring(16, 8);
modelCap.AZCPR00F.Add(verCap);
}
modelCap.SaveChanges();
}
catch (Exception ex)
{
throw;
}
}
当我第一次这样做时,也是在填充表格的情况下,一切正常。问题是当我在同一会话中第二次单击时,我有此异常:
存储更新、插入或删除语句影响了意外的行数 (0)。自加载实体以来,实体可能已被修改或删除。有关了解和处理乐观并发异常的信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=472540。
我阅读了参考资料,但我无法解决添加到而不是保存更改时发生的问题。感谢大家
不需要刷新 DbContext。看起来您没有关闭流阅读器:
private void AggiornaVersioneCappario()
{
try
{
if (modelCap.AZCPR00F.Count() > 0)
{
modelCap.Database.ExecuteSqlCommand("TRUNCATE TABLE [AZCPR00F]");
modelCap.Database.ExecuteSqlCommand("DBCC CHECKIDENT('AZCPR00F', RESEED, 0);");
modelCap.AZCPR00F.Local.Clear();
}
StreamReader reader = new StreamReader(str_azcpr00f);
string contents;
while ((contents = reader.ReadLine()) != null)
{
AZCPR00F verCap = new AZCPR00F();
verCap.CPRVER = contents.Substring(1, 5);
verCap.CPRDDE = contents.Substring(7, 8);
verCap.CPRDSC = contents.Substring(16, 8);
modelCap.AZCPR00F.Add(verCap);
}
modelCap.SaveChanges();
reader.Close();
}
catch (Exception ex)
{
throw;
}
}