AddDbContext被配置调用,但上下文类型“ContextClass”仅声明了一个无参数构造函数?

5

详细信息

我正在尝试创建asp.net core应用程序并使用scaffold-dbcontext生成类。当我运行该应用程序时,它显示了错误。我已经按照stackflow上其他问题的答案处理过相同的问题,但我的问题仍然存在。 问题

MyContext

public partial class MyContext: DbContext
{

    public MyContext(DbContextOptions<MyContext> options) : base(options)
    {
    }


    public virtual DbSet<Answer> Answer { get; set; }
    public virtual DbSet<Attachment> Attachment { get; set; }
    public virtual DbSet<Category> Category { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {

        if (!optionsBuilder.IsConfigured)
        {
            optionsBuilder.UseSqlServer(@"Server=.;Database=MyContext;Trusted_Connection=True;");
        }
    protected override void OnModelCreating(ModelBuilder modelBuilder) { .... }
}

Startup.cs

public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();

        services.AddMvc()
       .AddJsonOptions(options =>
           options.SerializerSettings.PreserveReferencesHandling = PreserveReferencesHandling.All);

        services.AddDbContext<MyContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

    }

错误

使用configuration调用了AddDbContext,但上下文类型'MyContext'仅声明了一个无参构造函数。这意味着传递给AddDbContext的配置永远不会被使用。如果要向AddDbContext传递configuration,则'MyContext'应该声明一个接受DbContextOptions的构造函数,并将其传递给DbContext的基本构造函数。


你修改了脚手架生成的 MyContext 类吗?你已经清理并重新构建整个解决方案了吗?为什么在你的 Startup.cs 中有两个 AddMvc() 调用? - ChW
这是一个部分类..你在其他文件中使用了MyContext类吗? - Niladri
我已经清理了解决方案。 - Malik Kashmiri
不,我没有在任何其他文件中使用MyContext。 - Malik Kashmiri
你最终是如何解决这个问题的? - Nashmár
@Nashmár 我不小心在同一个解决方案中的不同项目中创建了两个同名的数据库上下文类,然后我删除了第二个。 - Malik Kashmiri
1个回答

1

在 appsetting.json 文件中,使用名称为“DefaultConnection”的连接字符串进行声明。

"Data": {
   "DefaultConnection": "Data Source=(local); Initial Catalog=DBname; Integrated Security=True"
}

答案似乎在其中一个评论中,两个同名的类... - Julian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接