2012-12-23 140 views
4

我刚刚解决了我自己的问题,但认为我仍然可以帮助其他人阅读,因此决定发布它。EntityFramework单元测试示例


我想开始使用azure开发,目前处于启动和运行数据库的阶段。几hickups后,我取得了以下:

  • 安装VS2012,MSSQLSERVER2012,Azure的.NET SDK,6.0.0的EntityFrameworkα和一堆其他的东西
  • 写我的第一实体(代码优先),并产生数据库出来了。

在挑选下一个挑战之前,我想看到的最后一件事是实际上首先将一些东西添加到我新创建的数据库中。我认为最简单的方法是在nunit上写一个测试。

这是我走到这一步......

实体类用户

namespace Models.Users 
{ 
    public class User 
    { 
     public int Id { get; set; } 
     public string Name { get; set; } 
     public string EmailAddress { get; set; } 
    } 
} 

实体类UsersDb

using System.Data.Entity; 

namespace Models.Users 
{ 
    public class UsersDb : DbContext 
    { 
     public DbSet<User> Users { get; set; } 
    } 
} 

生成的数据库与以下PS命令:

enable-migrations -ProjectName Models -ContextTypeName Models.Users.UsersDb 
add-migration -ProjectName Models Initial 
update-database -ProjectName Models 

最后,我写了下面的单元测试

using Models.Users; 
using NUnit.Framework; 

namespace Tests 
{ 
    [TestFixture] 
    public class DatabaseTests 
    { 
     [Test] 
     public void AddUserTest() 
     { 
      var users = new UsersDb(); 
      var user = new User 
       { 
        Id = 1, 
        Name = "test", 
        EmailAddress = "[email protected]" 
       }; 

      users.Users.Add(user); 
      users.SaveChanges(); 
     } 
    } 
} 

该测试运行,但抛出例外,我想不通。

System.InvalidOperationException:System.Data.SqlClient的实体框架提供程序类型'System.Data.Entity.SqlServer.SqlProviderServices,EntityFramework.SqlServer,Version = 6.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089' 'ADO.NET提供程序无法加载。确保提供者程序集对正在运行的应用程序可用。有关更多信息,请参阅http://go.microsoft.com/fwlink/?LinkId=260882

解决方案

我不得不这样做,以解决这个问题,是开放的NuGet管理(右键点击解决方案),然后按上的EntityFramework管理按钮。在对话框中,在测试解决方案前添加一个复选框,然后重新生成。

现在,我有一个非常小的解决方案,通过单元测试创​​建一个新用户并将其保存到我的数据库中。一个不错的启动项目,我现在可以开始扩展。

回答

3

在输入问题本身时解决了问题。以为我仍然可以作为别人的参考。