Linq to sql 如何在不使用LINQPad中的SubmitChanges的情况下检索Insert语句

Linq to sql 如何在不使用LINQPad中的SubmitChanges的情况下检索Insert语句,linq-to-sql,linqpad,Linq To Sql,Linqpad,我在LINQPAD中使用了一些类似于下面的代码的C#语句。我的目标是获得实际的SQL插入语句,而不是实际更新数据库 使用这个小样本插入数据后,我可以很容易地删除数据,但我需要它来进行更大的数据推送。我希望我在L2S或LINQPad中错过了一些简单的东西 是否有更简单的方法检索SQL插入 var e1 = new MyEntity(){ Text = "First" }; var e2 = new MyEntity(){ Text = "Second" }; MyEntities.InsertO

我在LINQPAD中使用了一些类似于下面的代码的C#语句。我的目标是获得实际的SQL插入语句,而不是实际更新数据库

使用这个小样本插入数据后,我可以很容易地删除数据,但我需要它来进行更大的数据推送。我希望我在L2S或LINQPad中错过了一些简单的东西

是否有更简单的方法检索SQL插入

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

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

SubmitChanges();

一种快速的方法是将所有内容包装在一个从未提交的事务范围中:

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.
}

这适用于小卷。如果数据量很大,并且数据库上有完整的恢复模型,则事务日志增长可能会成为一个问题。

当我们为“LINQ in Action”进行示例时,我们使用以下方法从上下文中获取计划的更改:

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

如果您想看到这一点,请下载LINQPad中的示例(请参阅),并查看第6章示例6.29。

正如Jim Wooley所建议的,整个代码是:DataContext DataContext=this;髓质。InsertOnSubmit(e1);GetChangeText(dataContext.Dump();