這裏是我的數據庫上下文類構建配置傳遞中的DbContext作爲參數,這樣我就可以在一個單元測試使用它
public class WorldContext : IdentityDbContext<WorldUser>
{
private IConfigurationRoot _config;
public WorldContext(IConfigurationRoot config, DbContextOptions options): base(options)
{
_config = config;
}
public DbSet<Trip> Trips { get; set; }
public DbSet<Stop> Stops { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
base.OnConfiguring(optionsBuilder);
optionsBuilder.UseSqlServer(_config["ConnectionStrings:WorldContextConnection"]);
}
}
這裏是我的測試代碼,我想創建的部分我的dbcontext的一個實例。
var builder = new ConfigurationBuilder();
var config = builder.Build();
var options = new DbContextOptionsBuilder<WorldContext>()
.UseInMemoryDatabase(Guid.NewGuid().ToString())
.Options;
var context = new WorldContext(config, options);
VS中沒有錯誤,並建立罰款,但測試失敗:
留言信息:System.ArgumentNullException:值不能爲空。 參數名稱:ConnectionString的
[有參照該堆疊中的跟蹤:]
在 TheWorld.DAL.Models.WorldContext.OnConfiguring(DbContextOptionsBuilder optionsBuilder)
它表示連接字符串丟失。你確定你有連接字符串設置在配置文件中它需要? –
@ChetanRanpariya我想這是通過配置參數傳遞的,這正是我努力構建的。雖然因爲我正在使用它進行測試,所以我在選項中使用了'.InMemoryDatabase',所以也許我不應該使用我的實際連接字符串,因爲我沒有試圖打到實際的數據庫......(? ) – egmfrs