使用实体框架CPT4有没有办法执行自定义命令或脚本?
例如:
_dbSet.Provider.Execute("Truncate Table Users");
FWIW;我将在我的单元测试的类设置中使用它,并将使用干净的数据设置表。
答案 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,你必须移植它。