我必须在我的上下文中做错了我有我的上下文,我想在我的经理课程中结束。我希望能够使用using语句,以便我的上下文只使用一次。
public class xxxDbContext : DbContext
{
public xxxDbContext(DbContextOptions<xxxDbContext> options)
: base(options)
{ }
public DbSet<JobsList> JobListingss { get; set; }
public DbSet<Clients> ClientListings { get; set; }
public DbSet<Engineer> EngineerListing { get; set; }
public DbSet<Case> CasesListing { get; set; }
}
但是当我想在我的使用声明中使用我的上下文时,例如
public class xxxContext
{
xxxDbContext _db = new xxxDbContext();
public List<Case> GetAllCases(int databaseId)
{
List<Case> q = new List<Case>();
using (var myContext = new xxxDbContext(what must I reference here ?)))
{
q = myContext.Cases
.Where(w => w.databaseID == databaseId)
.OrderBy(o => o.CustomerName).ToList();
}
return q;
}
}
在我能够创建一个参数较少的构造之前,我可以在这里为核心执行相同操作,或者是否覆盖了要执行的操作。
另外,对于所有这些函数,我应该有一个单独的类,还是应该根据我的上下文设置一个部分类?
答案 0 :(得分:1)
您需要使用DbContextoptionsBuilder<T>
泛型类来获取选项实例:
var optionsBuilder = new DbContextOptionsBuilder<xxxDbContext>();
现在你必须使用创建的实例在构造函数中传递:
using (var myContext = new xxxDbContext(optionsBuilder.Options)))
{
// code here
}
修改强>
所以你需要的是首先在服务中配置服务以获取选项,如:
public void ConfigureServices(IServiceCollection services)
{
// using sqlite as example via official docs example
services.AddDbContext<xxxDbContext>(options => options.UseSqlite("Data Source=blog.db"));
}
然后在需要创建dbContext
的代码中,您可以解决它:
var options = serviceProvider.GetService<DbContextOptions<xxxDbContext>>();
现在将它传递给构造函数中的Context类对象创建时间:
var options = serviceProvider.GetService<DbContextOptions<xxxDbContext>>();
using (var myContext = new xxxDbContext(options)))
{
// code here
}
有关官方文档的详细信息,请参阅以下帖子: