jma*_*erx 3 c# asp.net linq-to-sql
我想在我的DB上执行语句:
/*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'
Run Code Online (Sandbox Code Playgroud)
我有我的LINQ datacontext:
public static bool ClearDatabase()
{
GetContext().ExecuteCommand("");
}
Run Code Online (Sandbox Code Playgroud)
MSDN文档中不明确的部分是......我应该将每个语句作为单独的命令运行还是要执行一个很长的字符串?
我还应该保留执行报表吗?
此外,如果有人知道用LINQ清除数据库的更好方法,请告诉我.
谢谢
Execute简单地执行它; 内部是完全不透明的(除了{0}等,用于表示参数 - 即{0}变成像@_p0,从params数组提供的值).因此,只要您的TSQL有效(并且不包括其他GO),那么它应该可以正常工作.它当然不关心TSQL很长.但是:试试吧.
但是,我个人认为从数据上下文中运行它是有风险的,因为数据上下文可能具有缓存状态,这可能真的会混淆事物.我个人直接从ADO.NET运行它(或通过像"dapper"这样的帮助器).但是我认为如果在执行此操作后立即丢弃(并且可能重新创建)数据上下文,它将正常工作.