2011-12-01 74 views
1

我在使用C#语句的LINQPAD中有类似于下面的代码的东西。我的目标是让实际的SQL Insert语句不实际更新数据库。如何在不使用LINQPad中的SubmitChanges的情况下检索插入语句

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

是否有更简单的方法检索SQL Insert?

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

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

SubmitChanges(); 

回答

2

快速正肮脏的方式是包装在一个事务范围内的一切,永远不会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. 
} 

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

1

当我们为“LINQ在行动”的样本,我们用下面的方法后者从上下文预定的变化:

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。

相关问题