如何在EF CTP4中执行自定义SQL

时间:2010-12-02 22:14:15

标签: entity-framework-4

使用实体框架CPT4有没有办法执行自定义命令或脚本?

例如:

_dbSet.Provider.Execute("Truncate Table Users");

FWIW;我将在我的单元测试的类设置中使用它,并将使用干净的数据设置表。

3 个答案:

答案 0 :(得分:1)

尝试使用ObjectContext.ExecuteStoreCommand方法。

  

使用现有连接直接对数据源执行任意命令。

     

调用ExecuteStoreCommand方法相当于调用DbCommand类的ExecuteNonQuery方法。

其他一些好消息:Tip 41 – How to execute T-SQL directly against the database

ExecuteStoreCommand

为例
// 10% inflation day! 
ctx.ExecuteStoreCommand("UPDATE Products SET Price = Price * 1.1");

答案 1 :(得分:0)

或许可以查看ndbunit来设置和拆除数据库以进行单元测试


修改

这是我们在单元/集成测试应用程序中使用的,我们的数据访问层实际上是使用EF4实现的。它非常简单,并提供了一种注入和清理可重复测试数据的好方法。

但是,我们还需要使用EF删除/截断应用程序逻辑本身中的表。因此,为了回答您的原始问题,我们只是在存储过程中加入“从表中删除”脚本,然后我们使用

从EF调用
_dataContext.ExecuteFunction("SchemaName.MyTableDeleteProc");

答案 2 :(得分:0)

我能想到的最快的解决方法是使用存储过程。另一种方法是使用批量删除描述http://www.aneyfamily.com/terryandann/post/2008/04/Batch-Updates-and-Deletes-with-LINQ-to-SQL.aspx< - 这里,但代码是基于Linq2Sql,而不是EF,你必须移植它。