【问题标题】:.NET Core 3.1 EntityFramework Core DatabaseModel Getting No Argument given.NET Core 3.1 EntityFramework Core DatabaseModel 没有给出参数
【发布时间】: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


【解决方案1】:

如果您不想使用网络核心服务,请尝试使用此代码:

var conString = ConfigurationManager.AppSettings["DefaultConnectionString"];
var dbContextOptions = new DbContextOptionsBuilder<DatabaseModels>();
dbContextOptions.UseSqlServer(conString);
var context = new DatabaseModels(dbContextOptions );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2020-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多