Я новичок в Linq to SQL, но я удивлен проблемами, возникающими при обновлении таблицы. Из чтения различных источников я думаю, что проблема, которую я получаю, является проблемой с отображением ORM, но даже при том, что я использую VS 2008 и создаю свой dbml с помощью класса LINQ to SQL, я этого не ожидаю. Итак, что происходит, когда я обновляю и/или вставляю строку, в таблице также создается множество других строк. Я не могу предсказать, что такое шаблон, когда это происходит, иногда этого не происходит. Я не уверен, что приведенный ниже код говорит очень многое о проблеме, но я воспроизвожу ее здесь;Обновление LInq также вставляет ненужные строки
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(); и строки будут вставлены в этот момент точно, а не раньше, а не некоторый код впоследствии.
Это действительно так. У меня 20 вставок. Несомненно, причина в том, что мое поле DataContext хранится следующим образом; public static FWHDataContext db = new FWHDataContext(); Я ввел следующий код; ChangeSet cs = db.GetChangeSet(); db.GetChangeSet(). Inserts.Clear(); cs = db.GetChangeSet(); Первоначально, чтобы установить точки останова и посмотреть, что происходит. У всех, кто очищал вставки, был неожиданный удар по эффектам. Какое оптимальное решение для этого? – arame3333
Почему статический DataContext? Это кажется опасным. DataContexts предназначены для легкого использования, поэтому вы можете создавать их везде, где вам нужно. Лучше создавать и уничтожать их кучу раз, чем держать лежащего во всем. – roufamatic
Вы правы, он не должен быть статичным. Я изменил это сейчас. – arame3333