我使用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();
答案 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。