首页 新闻 会员 周边 捐助

涉及数据库写入操作的单元测试疑问

0
[已解决问题] 解决于 2014-03-14 13:20

单元测试中,如果要测试涉及数据库写入的方法,那么测试数据会真正地被写入数据库吗?是不是还需要在测试方法中增加删除数据的操作?

飞鸟_Asuka的主页 飞鸟_Asuka | 菜鸟二级 | 园豆:393
提问于:2014-03-14 09:33
< >
分享
最佳答案
1

在事务中操作,增加数据之后进行回滚

begin tran

rollback
奖励园豆:5
dudu | 高人七级 |园豆:30948 | 2014-03-14 10:30

不好意思,是我没有表述清楚。

我想知道的是在EF框架下的DbContext类该怎么操作才能实现事务与回滚呢?似乎没有相应的方法

而且已经使用Repository又对DbContext做了一次封装了

飞鸟_Asuka | 园豆:393 (菜鸟二级) | 2014-03-14 11:46

@飞鸟_Asuka: 

来自Working with Transactions (EF6 Onwards)的参考代码:

namespace TransactionsExamples 
{ 
    class TransactionsExample 
    { 
        static void StartOwnTransactionWithinContext() 
        { 
            using (var context = new BloggingContext()) 
            { 
                using (var dbContextTransaction = context.Database.BeginTransaction()) 
                { 
                    try 
                    { 
                        context.Database.ExecuteSqlCommand( 
                            @"UPDATE Blogs SET Rating = 5" + 
                                " WHERE Name LIKE '%Entity Framework%'" 
                            ); 
 
                        var query = context.Posts.Where(p => p.Blog.Rating >= 5); 
                        foreach (var post in query) 
                        { 
                            post.Title += "[Cool Blog]"; 
                        } 
 
                        context.SaveChanges(); 
 
                        dbContextTransaction.Commit(); 
                    } 
                    catch (Exception) 
                    { 
                        dbContextTransaction.Rollback(); 
                    } 
                } 
            } 
        } 
    } 
}
dudu | 园豆:30948 (高人七级) | 2014-03-14 11:52

@dudu: 原来在context.Database属性里。谢谢

飞鸟_Asuka | 园豆:393 (菜鸟二级) | 2014-03-14 13:20
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册