如何在不使用LINQPad中的SubmitChanges的情况下检索插入语句

时间:2011-12-01 18:46:44

标签: linq-to-sql linqpad

我使用C#语句在LINQPAD中有类似于下面的代码。我的目标是让实际的SQL Insert语句实际上不更新数据库。

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

是否有更简单的方法来检索SQL插件?

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

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

SubmitChanges();

2 个答案:

答案 0 :(得分:2)

快速肮脏的方法是将所有内容包装在永不提交的事务范围中:

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

这适用于小批量。如果数据量很大并且您在数据库上具有完全恢复模型,则事务日志增长可能会成为问题。

答案 1 :(得分:1)

当我们为“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中下载示例(请参阅http://www.thinqlinq.com/Default/LINQ-In-Action-Samples-available-in-LINQPad.aspx)并查看第6章示例6.29。