linqpad - расширение SubmitChanges - PullRequest
       15

linqpad - расширение SubmitChanges

1 голос
/ 02 декабря 2011

Возможно ли заставить SubmitChanges () работать изнутри метода расширения?

В настоящее время у меня есть это:

void Main()
{
    // Write code to test your extensions here. Press F5 to compile and run.
    Helper.ConfirmSubmitChanges();
}

public static class Helper
{
    // Write custom extension methods here. They will be available to all queries.
    public static void ConfirmSubmitChanges() 
    { 
        if (MessageBox.Show("Save?", "Do you really want to save all changes?", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
        {
            SubmitChanges(); 
        }
    }
}

// You can also define non-static classes, enums, etc.

Но SubmitChanges () находится вне контекста здесь.Есть ли что-то, что я могу передать из моих запросов, которые будут использовать это расширение, чтобы оно работало?

Спасибо, Кохан

Ответы [ 2 ]

2 голосов
/ 02 декабря 2011

Вы можете сделать это, передав текущий контекст (this) в статический метод:

Ваша программа:

void Main()
{
    //Do Stuff  
    ConfirmSubmitChanges(this);
}

In My Extensions.linq :

static void ConfirmSubmitChanges(DataContext context)
{
    if (MessageBox.Show("Submit Changes?", "OK?", MessageBoxButtons.YesNo) == DialogResult.Yes)
    {
        context.SubmitChanges();
        "Saved".Dump();
    }
}
1 голос
/ 02 февраля 2012

В случае, если кто-то хочет знать, после передачи «это» в добавочный номер.Это то, что я создал в конце.Это приятно, потому что это также подтверждает количество изменений.

#region ConfirmSubmitChanges(DataContext dc)
public static void ConfirmSubmitChanges(DataContext dc)
{
    ConfirmSubmitChanges(dc, string.Empty);
}

public static void ConfirmSubmitChanges(DataContext dc, string AdditionalMessage)
{
    ChangeSet set = dc.GetChangeSet();
    var countChanges = 0;
        countChanges += set.Deletes.Count();
        countChanges += set.Inserts.Count();
        countChanges += set.Updates.Count();

    if (countChanges>0) {
        if(!string.IsNullOrEmpty(AdditionalMessage)) { AdditionalMessage = "\n\n(" + AdditionalMessage + ")"; }
        if (MessageBox.Show("Do you really want to save "+ countChanges+" changes?" + AdditionalMessage, "Save all changes?", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
        {
            dc.SubmitChanges();
        }
    }
}

#endregion
...