3

我想在我的数据库上执行语句:

/*Disable Constraints & Triggers*/
exec sp_MSforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
exec sp_MSforeachtable 'ALTER TABLE ? DISABLE TRIGGER ALL'

/*Perform delete operation on all table for cleanup*/
exec sp_MSforeachtable 'SET QUOTED_IDENTIFIER ON; DELETE ?'

/*Enable Constraints & Triggers again*/
exec sp_MSforeachtable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
exec sp_MSforeachtable 'ALTER TABLE ? ENABLE TRIGGER ALL'

/*Reset Identity on tables with identity column*/
exec sp_MSforeachtable 'IF OBJECTPROPERTY(OBJECT_ID(''?''), ''TableHasIdentity'') = 1 BEGIN DBCC CHECKIDENT (''?'',RESEED,0) END'

我有我的 LINQ 数据上下文:

   public static bool ClearDatabase()
      {
          GetContext().ExecuteCommand("");
      }

MSDN 文档中不清楚的部分是......我应该将每个语句作为单独的命令运行还是制作一个很大的长字符串来执行?

我还应该保留 exec 语句吗?

另外,如果有人知道使用 LINQ 清除数据库的更好方法,请告诉我。

谢谢

4

1 回答 1

6

Execute简单地执行它;内部是完全不透明的(除了{0}用于表示参数的 etc 之外 - 即{0}变成类似@_p0, 具有从params数组提供的值)。因此,只要您的 TSQL 有效(并且不包括GO等),它就应该可以正常工作。它当然不在乎 TSQL 很长。但是:试试看。

但是,我个人会说从数据上下文运行它是有风险的,因为数据上下文可能具有缓存状态,这可能会使事情变得混乱。就我个人而言,我会直接从 ADO.NET 运行它(或通过像“dapper”这样的助手)。但是我想如果您在执行此操作后立即处理+丢弃(并可能重新创建)数据上下文,它会正常工作。

于 2013-04-23T12:48:54.690 回答