Строка не найдена или изменена Ошибка LINQ C # в простом операторе

Прежде всего, нет никаких шансов, что это многопользовательская проблема, так как я работаю локально над версией базы данных для разработчиков. .

Я получаю не очень пояснительную ошибку Строка не найдена или не изменена , возникающая при выполнении 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.
        }
    }
}
19
задан Brock Adams 14 December 2015 в 07:36
поделиться