截断表的正确 LINQtoSQL 方式是啥?
Posted
技术标签:
【中文标题】截断表的正确 LINQtoSQL 方式是啥?【英文标题】:What is the correct LINQtoSQL-ish way to do a table truncate?截断表的正确 LINQtoSQL 方式是什么? 【发布时间】:2010-09-16 09:06:42 【问题描述】:我有一个具有强大数据访问层的项目,它使用 LinqtoSQL 处理几乎所有涉及我们数据库的事情。我需要构建一个帮助类,将一些常见的 crud 操作从 CLSA 对象连接到 LinqToSql 对象。一切都在顺利运行,直到我需要在表格上进行截断,而我所拥有的只是“删除”方法。
呃-哦。快速搜索发现有些人正在使用 YourContext.ExecuteCommand(),这很好,但这些天我正在尝试尽可能地使用“t-sql-less”。
有没有 LINQ 方法来执行truncate on a table?还是我只是clueless?
【问题讨论】:
【参考方案1】:如果不执行自定义 T-SQL 查询,这是不可能的。正如您可能已经知道的那样,执行 .Delete() 和 SubmitChanges 后缀会导致 DELETE 语句。
当然,您可以创建一个截断表的存储过程,然后从 LINQ 调用该过程,但我相信这并不是您真正想要的。
【讨论】:
是的。这是最 OOP 的方法,但它仍然需要传递字符串变量。我有一个名为“Page”的表,出于显而易见的原因,它在 C#/ASPNET 世界中需要是“Pages”。因此,截断该表需要开发人员知道“页面”== 实体页面。 如果您创建了一个存储过程,您可以通过将“Pages”-ish C# 存储过程名称映射到数据库中进行截断的实际存储过程来解决这个问题。如果您必须采用 TSQL 方式,那么您可以将该方法添加到生成的部分 LINQ 类中(取决于您如何制作它们)并以这种方式隐藏它。 啊啊啊啊啊啊啊啊。现在我们正在前往 NerdVille 的特快列车上。人口:我们。我喜欢。我的意思是,基本上他们会传入一个实体对象,然后我会将类型转换为字符串并将其传递到将类映射到表名的存储过程中。不错。【参考方案2】:你可以这样做:
yourDataContext.ExecuteCommand("TRUNCATE TABLE YourTable");
【讨论】:
对。这就是我在问题中提到的。我终于尝试免费使用 TSQL 了!!! :)以上是关于截断表的正确 LINQtoSQL 方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章