【发布时间】:2021-02-24 18:06:37
【问题描述】:
使用 .NET Core 2.2 时。我可以做以下 test.cs:
var context = new DatabaseModels();
Test = conext.Test.AsEnumerable().OrderBy(a => a.ID);
但是,当我升级到 .NET Core 3.1 时。我将以下几行添加到我的 DBContext 文件中,以便代码运行。
DbContext.cs:
public class DatabaseModels: DbContext
{
public DatabaseModels(DbContextOptions options)
: base(options)
{ }
public DbSet<Test> Test {get; set;}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(@"Data Source=<removed>;Initial Catalog=<removed>;Integrated Security=SSPI;Trusted_Connection=True;MultipleActiveResultSets=true;");
}
}
}
startup.cs
services.AddDbContext<DatabaseModels>(options => options.UseSqlServer(configurationSection.Value));
但是,现在这会导致我所有的 var context = new DatabaseModels();给我一个错误 没有给出与“DatabaseModels.DatabaseModels(DBContextOptions)”所需的形参“options”相对应的参数
我尝试添加 null 但这表明它不能为 null。我也尝试了其他选择,但没有成功。我在 var context = new DatabaseModels(); 中放置了什么重载?让它不出错?
错误:
错误 CS7036 没有给出与“DatabaseModels.DatabaseModels(DbContextOptions)”所需的形参“options”相对应的参数
【问题讨论】:
-
假设您的 DatabaseModels 是您的上下文,那么该类是否继承自“DbContext”?例如“公共类数据库模型:DbContext”
-
正确。公共类数据库模型:DbContext。 public DatabaseModels(DbContextOptions options) : base(options) { } 包含在该公共类中。
-
你想在哪里更新这个上下文?为什么不使用.Net Core 3.1 项目的典型依赖注入呢?而不是“var context = new ...”,为什么不在你需要的地方注入上下文呢?我假设您的 Startup.cs 中有一个“services.AddDbContext()”调用?
-
你的启动文件中有 services.AddDbContext... 吗?请给我们看看。
-
布莱恩。我做 var context = new DatabaseModels();所以我可以填充列表 Test (Test = conext.Test.AsEnumerable().OrderBy(a => a.ID);)。但是,由于我必须 (public DatabaseModels(DbContextOptions options) : base(options) { }) 我得到了 var context = new DatabaseModels();需要有一个选项(重载)。希望能够在其他文件中从 DatabaseModels 加载列表。在 .NET Core 2.2 中,我不需要使用选项/重载。但是,对于我的一生,我无法弄清楚要在过载中添加什么才能使其正常工作。
标签: c# entity-framework .net-core entity-framework-core