【发布时间】:2018-11-09 03:23:32
【问题描述】:
我有一个 DbContext 我需要从 DLL 动态加载,因为 Db 上下文会发生变化并且需要在应用程序运行时进行编辑,但是我似乎无法创建这个上下文的实例,因为我似乎需要传递上下文选项。这段代码如下。
Assembly reporting = Assembly.LoadFile(pathString);
var defaultContext = reporting.GetType("Reporting.DefaultContext");
var dbContext = Activator.CreateInstance(defaultContext, new
object[] { /*need to pass in the contructor here*/ }) as DbContext;
而且我编译的上下文是相当标准的,下面这个的修改版本供参考
public class DefaultContext : DbContext
{
public DefaultContext(DbContextOptions<DefaultContext> options)
: base(options)
{ }
public virtual DbSet<Student> Students { get; set; }
public virtual DbSet<Course> Courses { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Student>().ToTable("Students ", "core")
.AllProperties().ForEach(x => x.IsRequired());
modelBuilder.Entity<Course>().ToTable("Courses", "core")
.AllProperties().ForEach(x => x.IsRequired());
}
}
在反思方面我非常缺乏经验 - 所以问题确实如此;
这是尝试实现这一目标的最佳方式,还是我应该创建一个方法来调用 DLL 以返回上下文?
如果没有上下文,我该如何传递 DbContextOptions 的实例?
旁注,这是一个 Asp.Net Core 2.0 MVC 项目。
编辑:当将一个空的 obj 数组传递给创建实例时,如下所示,我得到一个缺少的方法异常(未找到构造函数)
var dbContext = Activator.CreateInstance(defaultContext, new object[] { new object[0] }) as DbContext;
而如果我不传入第二个 obj 参数,我会得到相同的异常,但会显示消息“没有为此对象定义无参数构造函数”,所以现在我很迷茫,因为显然有一个构造函数。
【问题讨论】:
标签: c# entity-framework-core asp.net-core-2.0 system.reflection ef-core-2.0