rusty
rusty

Reputation: 87

How do I retrieve Insert Statements without using SubmitChanges in LINQPad

I have something similar to the code below in LINQPAD using C# Statements. My goal is to get the actual SQL Insert statments not actually update the database.

I can easily delete the data after it inserts with this small sample, but I will need this for a larger push of data. I hope that I have missed something simple either in L2S or LINQPad.

Is there an easier way retrieve the SQL Insert?

var e1 = new MyEntity(){ Text = "First" };
var e2 = new MyEntity(){ Text = "Second" };

MyEntities.InsertOnSubmit(e1);
MyEntities.InsertOnSubmit(e2);

SubmitChanges();

Upvotes: 1

Views: 717

Answers (2)

Jim Wooley
Jim Wooley

Reputation: 10418

When we did the samples for "LINQ in Action", we used the following method which gets the scheduled changes from the context:

public String GetChangeText(System.Data.Linq.DataContext context)
    {
      MethodInfo mi = typeof(DataContext).GetMethod("GetChangeText", 
                             BindingFlags.NonPublic | BindingFlags.Instance);
      return mi.Invoke(context, null).ToString();
    }

If you want to see this in action, download the samples in LINQPad (see http://www.thinqlinq.com/Default/LINQ-In-Action-Samples-available-in-LINQPad.aspx) and check out chapter 6 example 6.29.

Upvotes: 1

Anders Abel
Anders Abel

Reputation: 69290

A quick-n-dirty way is to wrap everything in a transaction scope that is never commited:

using(TransactionScope ts = new TransactionScope())
{
  var e1 = new MyEntity(){ Text = "First" };
  var e2 = new MyEntity(){ Text = "Second" };

  MyEntities.InsertOnSubmit(e1);
  MyEntities.InsertOnSubmit(e2);

  SubmitChanges();

  // Deliberately not committing the transaction.
}

This works well for small volumes. If the data volume is large and you have full recovery model on the database the transaction log growth might become a problem.

Upvotes: 2

Related Questions