我是Linq to SQL的新手,但我对我更新表的问题感到惊讶。 从阅读各种来源我认为我得到的问题是ORM映射的问题,但即便如此,鉴于我使用VS 2008并通过LINQ to SQL类创建我的dbml,我不指望这样。 所以发生的事情是,当我更新和/或插入一行时,也会在表中创建许多其他行。当发生这种情况时,我无法预测模式是什么,有时它不会发生。 我不确定下面的代码非常说明问题是什么,但我在这里重现它;
public static void UpdateDailyTimeRecorded(
int dailyTimeRecordedId, bool amFlag, string timeIn, string timeOut)
{
DailyTimeRecorded dtr = GetDailyTimeRecorded(dailyTimeRecordedId);
if (amFlag == true)
{
dtr.MorningTimeIn_HH = Convert.ToInt32(timeIn.Substring(0, 2));
dtr.MorningTimeIn_MM = Convert.ToInt32(timeIn.Substring(3, 2));
dtr.MorningTimeOut_HH = Convert.ToInt32(timeOut.Substring(0, 2));
dtr.MorningTimeOut_MM = Convert.ToInt32(timeOut.Substring(3, 2));
dtr.MorningLeaveFlagId = 0;
}
else
{
dtr.AfternoonTimeIn_HH = Convert.ToInt32(timeIn.Substring(0, 2));
dtr.AfternoonTimeIn_MM = Convert.ToInt32(timeIn.Substring(3, 2));
dtr.AfternoonTimeOut_HH = Convert.ToInt32(timeOut.Substring(0, 2));
dtr.AfternoonTimeOut_MM = Convert.ToInt32(timeOut.Substring(3, 2));
dtr.AfternoonLeaveFlagId = 0;
}
try
{
db.SubmitChanges();
}
catch (ChangeConflictException)
{
db.ChangeConflicts.ResolveAll(RefreshMode.KeepChanges);
}
}
我在db.SubmitChanges()行上放了一个断点;并且在这一点上插入行是肯定的,而不是之前,而不是之前的某些代码。
答案 0 :(得分:2)
我知道可能导致LINQ插入意外数据的一个原因就是这个。即使您没有向特定表显式添加一行数据,如果您将其链接到已明确添加的另一个对象,LINQ to SQL将隐式添加它。
另一个原因是您无法轻松回滚或撤消添加到上下文的挂起更改。我的理解是,最好的做法是处理包含不需要的对象的上下文,并在您意识到不想执行更新时启动一个新对象。
答案 1 :(得分:1)
致电DataContext.GetChanges()
并查看其他内容。它可能来自之前对数据上下文的“未提交”操作。