Linq to sql 如何在不使用LINQPad中的SubmitChanges的情况下检索Insert语句
我在LINQPAD中使用了一些类似于下面的代码的C#语句。我的目标是获得实际的SQL插入语句,而不是实际更新数据库 使用这个小样本插入数据后,我可以很容易地删除数据,但我需要它来进行更大的数据推送。我希望我在L2S或LINQPad中错过了一些简单的东西 是否有更简单的方法检索SQL插入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
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();