Что я могу сделать, чтобы устранить исключение «Строка не найдена или изменена» в LINQ to SQL в базе данных SQL Server Compact Edition?

Во-первых, полезно узнать, в linq-query-syntax чем проблема. Решение с поиском linq-to-sql в Google должно помочь, вы .net можете регистрировать детали dotnet (таблица, столбец, старое dot-net значение, новое значение) о .net-framework конфликте, чтобы найти лучшее sql-to-linq решение для разрешения конфликта .net-framework позже:

public class ChangeConflictExceptionWithDetails : ChangeConflictException
{
    public ChangeConflictExceptionWithDetails(ChangeConflictException inner, DataContext context)
        : base(inner.Message + " " + GetChangeConflictExceptionDetailString(context))
    {
    }

    /// 
    /// Code from following link
    /// https://ittecture.wordpress.com/2008/10/17/tip-of-the-day-3/
    /// 
    /// 
    /// 
    static string GetChangeConflictExceptionDetailString(DataContext context)
    {
        StringBuilder sb = new StringBuilder();

        foreach (ObjectChangeConflict changeConflict in context.ChangeConflicts)
        {
            System.Data.Linq.Mapping.MetaTable metatable = context.Mapping.GetTable(changeConflict.Object.GetType());

            sb.AppendFormat("Table name: {0}", metatable.TableName);
            sb.AppendLine();

            foreach (MemberChangeConflict col in changeConflict.MemberConflicts)
            {
                sb.AppendFormat("Column name : {0}", col.Member.Name);
                sb.AppendLine();
                sb.AppendFormat("Original value : {0}", col.OriginalValue.ToString());
                sb.AppendLine();
                sb.AppendFormat("Current value : {0}", col.CurrentValue.ToString());
                sb.AppendLine();
                sb.AppendFormat("Database value : {0}", col.DatabaseValue.ToString());
                sb.AppendLine();
                sb.AppendLine();
            }
        }

        return sb.ToString();
    }
}

Создайте помощника dot-net для упаковки ваших sumbitChanges:

public static class DataContextExtensions
{
    public static void SubmitChangesWithDetailException(this DataContext dataContext)
    {   
        try
        {         
            dataContext.SubmitChanges();
        }
        catch (ChangeConflictException ex)
        {
            throw new ChangeConflictExceptionWithDetails(ex, dataContext);
        }           
    }
}

Затем dotnet вызовите код отправки изменений:

Datamodel.SubmitChangesWithDetailException();

Наконец, зарегистрируйте .net-framework исключение в вашем глобальном .net обработчике исключений:

protected void Application_Error(object sender, EventArgs e)
{         
    Exception ex = Server.GetLastError();
    //TODO
}

.net

linq

linq-to-sql

2022-11-15T18:20:15+00:00
Вопросы с похожей тематикой, как у вопроса:

Что я могу сделать, чтобы устранить исключение «Строка не найдена или изменена» в LINQ to SQL в базе данных SQL Server Compact Edition?