LINQ to SQL - Обновление объектов контекста данных в частичных классах - PullRequest
1 голос
/ 27 февраля 2009

Я создал метод расширяемости для удаления одного из моих объектов Linq To Sql, который называется Reservation.

Что ж, в этом частичном методе, который я создал, я хочу обновить некоторые другие объекты. Кажется, я не могу сохранить обновление в базе данных. Вот мой частичный метод удаления бронирования.

public partial class LawEnforcementDataContext
{

    partial void DeleteReservation(Reservation instance)
    {
        // Get ID's of those seated in course
        var roster = new Roster(this, instance.CourseID);
        var seated = from r in roster.All
                     where r.WaitingList == false
                     select r.ID;

        // delete the reservation
        this.ExecuteDynamicDelete(instance);

        // get seated id's not in original seated ids
        var newlySeated = from r in roster.All
                          where r.WaitingList == false && !seated.Contains(r.ID)
                          select r.ID;

        var reservations = this.Reservations.Where(r => newlySeated.Contains(r.ID));

        foreach (var r in reservations)
        {
            r.Confirmed = false;
            // Have tried doing nothing, thinking calling code's db.SubmitChanges() would do the trick
            //this.ExecuteDynamicUpdate(r); HAVE TRIED THIS
        }
        //this.SubmitChanges(); HAVE TRIED THIS
    }
}

Удаление выполняется, а обновление - нет. В нескольких последних строках прокомментированы некоторые вещи, которые я пробовал.

Есть идеи? Спасибо!

EDIT

Вот что я сделал, чтобы решить эту проблему:

   public override void SubmitChanges(System.Data.Linq.ConflictMode failureMode)
{
    ChangeSet delta = GetChangeSet();

    foreach (var res in delta.Deletes.OfType<Reservation>())
    {
        // Get ID's of those seated in course
        var roster = new Roster(this, res.CourseID);
        var seated = from r in roster.All
                     where r.WaitingList == false
                     select r.ID;

        base.SubmitChanges(failureMode);

        // get seated id's not in original seated ids
        var newlySeated = from r in roster.All
                          where r.WaitingList == false && !seated.Contains(r.ID)
                          select r.ID;

        var reservations = this.Reservations.Where(r => newlySeated.Contains(r.ID));

        foreach (var r in reservations)
        {
            r.Confirmed = false;
        }
    }

    base.SubmitChanges(failureMode);
}

Ответы [ 2 ]

5 голосов
/ 27 февраля 2009

Я ожидаю, что проблема здесь в том, что он уже вызвал GetChangeSet().

Я предлагаю вам переопределить SubmitChanges() в контексте данных и применить вместо этого эту логику ...

partial class LawEnforcementDataContext
{
    public override void SubmitChanges(
        System.Data.Linq.ConflictMode failureMode)
    {
        ChangeSet delta = GetChangeSet();
        foreach (var reservation in delta.Deletes.OfType<Reservation>())
        {
            // etc
        }
        base.SubmitChanges(failureMode);
    }
}
0 голосов
/ 29 марта 2013

Вот объяснение и хороший способ обновить объекты в частичных классах: Реализация linqtosql частичного класса DataContext - как проверить значения до / после

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...