我的应用程序对处理程序类实例使用单例模式。它负责处理一些事件:
public class MyHandler
{
public void HandlerEvent(object sender, EventArgs e)
{
//want to update DB here
}
}
可能MyHandler需要开始与DB交互。我可以这样做吗?有我的愿景:
DbContext
处作为单身人员加上MyHandler
。显然这是一个坏主意。DbContext
发送到MyHandler
,但作为实例“每个请求一个”。我认为在我的情况下(MyHandler
是单身)这类似于1 using
运算符执行,即作为原子事务,例如using(var context = new XDbContext()) {...}
至于我,这是一个很好的方法,但实体框架核心实现的DbContext需要DbContextOptions
作为其构造函数的参数。如果我为XDbContext声明无参数构造函数,那么它会引发异常。有什么想法吗?
答案 0 :(得分:1)
我已经看过ef核心教程(http://codepen.io/anon/pen/ezJGPB),据我所知,DbContextOptions
- 只是一个包含配置参数的对象。如果我有同样的问题,我会使用第三种方式(使用),但会创建一个帮助器来注入参数或使用工厂。我在教程中找到了一个工厂的例子
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
namespace MyProject
{
public class BloggingContextFactory : IDbContextFactory<BloggingContext>
{
public BloggingContext Create()
{
var optionsBuilder = new DbContextOptionsBuilder<BloggingContext>();
optionsBuilder.UseSqlite("Filename=./blog.db");
return new BloggingContext(optionsBuilder.Options);
}
}
}
使用示例:
public class MyHandler
{
public void HandlerEvent(object sender, EventArgs e)
{
// Or make 'Create' method static
using(var context = new BloggingContextFactory().Create())
{
. . .
}
}
}