Прежде всего, нет никаких шансов, что это многопользовательская проблема, так как я работаю локально над версией базы данных для разработчиков. .
Я получаю не очень пояснительную ошибку Строка не найдена или не изменена
, возникающая при выполнении db.SubmitChanges (). Если я прерву выполнение непосредственно перед тем, как произойдет SubmitChanges (), я могу проверить в SQL Server Management Studio, и строка действительно существует !
Вот код для всей функции, просто чтобы поместить его в контекст для всех, кто хочет помочь, но проблемная строка находится прямо в конце (строка 48).
Обновление Это действительно странно: ошибка вызвана обновлением matchTrans.Url (см. предпоследнюю строку кода). Комментирование этой строки не вызывает ошибки - даже если соответствиеTrans.Title все еще обновляется.
private static void MenuItemUpdate(int languageId, NavigationItem item)
{
using (var db = DataContextFactory.Create<MyDataContext>())
{
// Select existing menu item from database.
var dbItem =
(from i in db.MenuItems
where i.Id == item.Id
select i).Single();
// Obtain ID of link type.
dbItem.FkLinkTypeId = GetLinkTypeByName(
Enum.GetName(typeof (NavigationItemLinkType), item.LinkType)).Id;
// Update the Link field with what is given.
dbItem.Link = item.Link;
db.SubmitChanges();
// Item already exists and needs editing.
// Get associated translations.
var trans =
from t in db.MenuItemTranslations
where t.FkMenuItemId == item.Id
select t;
// If translation exists for given language, edit it.
var matchingTrans =
(from t in trans
where t.FkLanguageId == languageId
select t).SingleOrDefault();
if (matchingTrans == null)
{
// No matching translation - add one.
var newDbTrans = new MenuItemTranslation
{
FkMenuItemId = item.Id,
FkLanguageId = languageId,
Title = item.Title,
Url = item.FriendlyUrl
};
db.MenuItemTranslations.InsertOnSubmit(newDbTrans);
db.SubmitChanges();
}
else
{
// Matching translation - edit it.
matchingTrans.Title = item.Title;
matchingTrans.Url = item.FriendlyUrl;
db.SubmitChanges();
// WTF ERROR: Row not found or changed.
}
}
}