使用统一容器的带有连接字符串的 EF 多构造函数:"The underlying provider failed on Open"
EF multiple constructor with connection string using unity container : "The underlying provider failed on Open"
我正在使用 ef 6 和 unity 容器。当我不初始化默认的 dbcontext 构造函数时,unity 在初始化默认的 dbcontext 构造函数时无法识别控制器 injection.but,我使用
Database.SetInitializer<EfDbContext
>(null);
那次它抛出 "The underlying provider failed on Open" 和 无法附加文件 Migrations.EfDbContext.mdf Db 迁移错误
public EfDbContext() : base()
{
Database.SetInitializer<EfDbContext>(null);
}
public EfDbContext(string connectionString) : base(connectionString)
{
Database.SetInitializer<EfDbContext>(null);
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
来自服务的呼叫
public JsonResult Something()
{
using (var db = new EfDbContext("con1"))
{
db.Database.Connection.Open();
var data = db.Database.SqlQuery<Something>("SELECT * FROM [dbo].[Table]").ToList();
db.Database.Connection.Close();
}
..............
}
和UnityConfig
public static void RegisterComponents()
{
var container = new UnityContainer();
container.RegisterType(typeof(IService<>), typeof(Service<>));
ConventionRegistrar.Configure(container);
GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);
}
请尝试..
public EfDbContext() : this("Pass Your Default Connection String")
{
}
public EfDbContext(string connectionString) : base(connectionString)
{
}
//DBSet's
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
Database.SetInitializer<ApplicationDbContext>(null);
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
//... Fuluent api
}
希望它能奏效。
我正在使用 ef 6 和 unity 容器。当我不初始化默认的 dbcontext 构造函数时,unity 在初始化默认的 dbcontext 构造函数时无法识别控制器 injection.but,我使用
Database.SetInitializer<
EfDbContext
>(null);
那次它抛出 "The underlying provider failed on Open" 和 无法附加文件 Migrations.EfDbContext.mdf Db 迁移错误
public EfDbContext() : base()
{
Database.SetInitializer<EfDbContext>(null);
}
public EfDbContext(string connectionString) : base(connectionString)
{
Database.SetInitializer<EfDbContext>(null);
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
来自服务的呼叫
public JsonResult Something()
{
using (var db = new EfDbContext("con1"))
{
db.Database.Connection.Open();
var data = db.Database.SqlQuery<Something>("SELECT * FROM [dbo].[Table]").ToList();
db.Database.Connection.Close();
}
..............
}
和UnityConfig
public static void RegisterComponents()
{
var container = new UnityContainer();
container.RegisterType(typeof(IService<>), typeof(Service<>));
ConventionRegistrar.Configure(container);
GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);
}
请尝试..
public EfDbContext() : this("Pass Your Default Connection String")
{
}
public EfDbContext(string connectionString) : base(connectionString)
{
}
//DBSet's
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
Database.SetInitializer<ApplicationDbContext>(null);
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
//... Fuluent api
}
希望它能奏效。