![](/img/trans.png)
[英]I am getting this error: System.MissingMethodException Message=Default constructor not found for type AbuseAlert.Views.Hotels
[英]System.MissingMethodException Constructor on type xxx not found
我有一个generic method
,这个方法将接收一个dbcontext
类型。 这个泛型方法应该从接收到的上下文类型创建一个新实例并返回它。
一个 Dbcontext 示例:
class SchoolContext:DbContext
{
public SchoolContext(DbContextOptions<SchoolContext> dbContextOptions):base(dbContextOptions)
{
}
public DbSet<Branche> Branches { get; set; }
public DbSet<Student> Students { get; set; }
}
我尝试了什么:
public static TContext GetInstance<TContext>(string connectionString) where TContext:DbContext
{
var optionsBuilder = new DbContextOptionsBuilder();
optionsBuilder.UseSqlServer(connectionString);
TContext context = Activator.CreateInstance(typeof(TContext), optionsBuilder.Options) as TContext;
return context;
}
我得到的错误:
System.MissingMethodException: 'Constructor on type 'SchoolContext' not found.'
那么请问我该如何解决这个问题?
差不多好了。 您只需从DbContextOptionsBuilder<TContext>
开始为构造函数创建DbContextOptions<SchoolContext>
,如下所示:
public static TContext GetInstance<TContext>(string connectionString) where TContext : DbContext
{
var optionsBuilder = new DbContextOptionsBuilder<TContext>();
optionsBuilder.UseSqlServer(connectionString);
TContext context = (TContext)Activator.CreateInstance(typeof(TContext), optionsBuilder.Options);
return context;
}
这不是通用的:
var optionsBuilder = new DbContextOptionsBuilder();
所以这也不能是通用的:
optionsBuilder.Options
因此,如果您有一个需要特定泛型类型作为参数的构造函数: public SchoolContext(DbContextOptions<SchoolContext> dbContextOptions)
...那么这意味着您没有传递此构造函数所期望的内容。 所以Activator.CreateInstance
正在寻找一个构造函数,它接受任何optionsBuilder.Options
(非通用选项),但它找不到。 这就是缺少的方法。
您需要弄清楚如何创建DbContextOptions<SchoolContext>
的实例。
如果你改变这个
var optionsBuilder = new DbContextOptionsBuilder();
至
var optionsBuilder = new DbContextOptionsBuilder<SchoolContext>();
那么Options
属性将返回您需要的泛型类型DbContextOptions<SchoolContext>
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.