SubmitChanges не сохраняет, но удаляет вставки из набора изменений, ошибок нет - PullRequest
0 голосов
/ 01 апреля 2010

У меня есть более глубокий вопрос относительно функциональности отладки функции Linq to Sql SubmitChanges ().

Я хочу сохранить запись в таблице локально кэшированной базы данных (localdbcache: сервер SqlExpress 2008 клиент SqlCE). Перед вызовом SubmitChanges я могу найти новый элемент через DataContext.GetChangeSet (). После вызова Submit Changes элементы для вставки были удалены из ChangeSet. (Это то, что эта функция должна делать.) Нет конфликтов изменений и нет ошибок в выводе журнала базы данных. Никаких исключений. Число таблиц остается неизменным.

if ((e.Parameter == null) ||
   (!e.Parameter.GetType().Equals(typeof(LibDB.Client.Vehicles))))
{
    return;
}

LibDB.Client.Vehicles tmp = e.Parameter as LibDB.Client.Vehicles;

try
{
    ChangeSet cs = this._dc.GetChangeSet();

    if ((tmp == null) || (this._dc == null)) return;

    if (this._dc.Vehicles.Where(veh => veh.Vin == tmp.Vin).Count() == 0)
        this._dc.Vehicles.InsertOnSubmit(tmp);
    else if (this._dc.Vehicles.Where(veh => veh.Vin == tmp.Vin).Count() == 1)
        this._dc.Vehicles.Attach(tmp, true);
    else
        return;

    using (TransactionScope ts = new TransactionScope())
    {
        try
        {                        
            this._dc.SubmitChanges();
            //this._dc.Refresh(RefreshMode.OverwriteCurrentValues,
            //    this._dc.Vehicles);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }

    if (this._dc.Vehicles.Where(veh => veh.Vin == tmp.Vin).Count() == 1)
        MessageBox.Show("Vehicle not saved.");

    this.vehSelector.ResetLayout();
}

Буду признателен за любую помощь, так как теряю надежду найти любую ошибку, Спасибо заранее Уинстон

Ответы [ 2 ]

0 голосов
/ 01 апреля 2010

Проверьте счетчик для нового экземпляра _dc. Вы должны избавиться от него после звонка .SaveChanges()

Еще один способ изолировать проблему - взглянуть на счет на самой таблице, без использования Linq.

0 голосов
/ 01 апреля 2010

Есть ли у вашей сущности первичный ключ, определенный в БД?

...