![](/img/trans.png)
[英]Code based DB migration in Entity Framework 6.1.2: How to avoid using powershell commands?
[英]How to do integration test using Entity Framework Code First V6.1.2
我正在尝试使用EF代码优先6.1.2为我的数据库访问逻辑添加一些集成测试。 我想在一个单独的数据库上执行此操作,这样就不会用测试数据弄乱生产数据库。
同样,测试应该是可重复的,这意味着如果不存在则应该创建数据库,为测试数据添加种子,运行测试并在完成后最终将其删除。
我也没有测试数据库没有Enable-Migrations
命令也无法做到这一点。
这将是我的dbContext
用于生产:
public partial class ApplicationDbContext :
IdentityDbContext<ApplicationUser, ApplicationRole, int, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim>, IApplicationDbContext
{
public ApplicationDbContext() : base("name=DefaultConnection") { }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
if (base.Database.Connection.ConnectionString == "DefaultConnectionTest")
Database.SetInitializer(new DropCreateDatabaseAlways<ApplicationDbContext>());
else
Database.SetInitializer(new MigrateDatabaseToLatestVersion<ApplicationDbContext, Configuration>());
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<ApplicationUser>().ToTable("Users");
modelBuilder.Entity<ApplicationRole>().ToTable("Roles");
modelBuilder.Entity<ApplicationUserRole>().ToTable("UserRoles");
modelBuilder.Entity<ApplicationUserLogin>().ToTable("UserLogins");
modelBuilder.Entity<ApplicationUserClaim>().ToTable("UserClaims");
}
public DbSet<Order> Orders { get; set; }
public DbSet<Product> Products { get; set; }
public DbSet<Person> Persons { get; set; }
}
我已经使用Ninject
Dependency Injection
设置了一切。 使用连接字符串作为参数public ApplicationDbContext(string dbConnection) : base(dbConnection) { }
添加一个额外的构造函数,仍然会让我运行Enable-Migrations
命令。
有什么办法可以自动化这个过程? 还是有人可以提出其他建议?
我想坚持使用SQL Server数据库,因为使用其他数据库进行测试可能会给我带来误报。
您必须使用数据库初始化程序。 有一些可用的:
Database.SetInitializer(new CreateDatabaseIfNotExists<InterstoneContext>());
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<InterstoneContext>());
Database.SetInitializer(new DropCreateDatabaseAlways<InterstoneContext>());
您需要第三个选择。 请注意您的连接字符串,不要覆盖生产数据库。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.