Это немного догадка, так как я на самом деле никогда не использовал GetOriginalEntityState
, но вопрос заинтересовал меня, чтобы выяснить, что происходит.
Я думаю, что цель здесь состоит в том, чтобы проверить, что product
все еще прикреплен к исходному DataContext
Строка:
if (productsTable.GetOriginalEntityState(product) == null)
Я думаю, что это вернет ноль, если product
был отсоединен или создан вручную и не обработанDataContext
.
С MSDN :
Этот метод возвращает исходное состояние объекта, поскольку он был создан или присоединен к текущему DataContext.Исходное состояние объекта, который был сериализован и десериализован, должен быть предоставлен независимым механизмом отслеживания и предоставлен, когда объект присоединен к новому DataContext.Для получения дополнительной информации см. Операции получения данных и CUD в приложениях N-уровня (LINQ to SQL).
Я думаю, что ключевая строка для понимания:
Этот методвозвращает исходное состояние объекта, так как он был создан или присоединен к текущему DataContext.
GetOriginalEntityState
используется для того, чтобы метод мог получить объект с возможностью не присоединяться уже кDataContext
.Прикрепленное значение, возвращаемое вызовом Linq To SQL, а не просто создание экземпляра типа Product p = new Product() { ... };
.Если он не присоединен, он присоединит его к DataContext
и сохранит любое из значений, которые были изменены (с сохранением значений обновления) из-за параметра RefreshMode.KeepCurrentValues
.
Тогда productsTable.Context.SubmitChanges();
всегдаЭто происходит потому, что даже если он отсоединен, GetOriginalEntityState
позаботится о том, чтобы он был присоединен, и отправка будет работать.