如何在多个应用程序中使用一个DbContext?
我有一个WCF应用程序(Net TCP绑定)接口,并且实现与DbContext一起正常工作。需要来自同一个应用程序的API,我不想因为配置而在WCF上启用Http绑定,而且我有很多合同。所以我决定通过DI将服务导入到asp.net core 2中它工作正常但是通过DbContext连接到Db总是返回null。
数据库上下文:
public class AppDbContext : DbContext
{
public AppDbContext(DbContextOptions<AppDbContext> options) : base(options){}
public AppDbContext()
{
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseSqlServer(@"Server=.\;Database=Database;Trusted_Connection=True;MultipleActiveResultSets=true");
}
}
}
服务实施
public partial class GeneralService : IGeneralService, IDisposable
{
protected readonly AppDbContext Db = new AppDbContext();
public void Dispose()
{
Db.Dispose();
}
}
Asp.net核心启动
public void ConfigureServices(IServiceCollection services)
{
const string connection = @"Server=.\;Database=Database;Trusted_Connection=True;MultipleActiveResultSets=true";
services.AddDbContext<AppDbContext>(options => options.UseSqlServer(connection));
services.AddSingleton<IGeneralService,GeneralService>();
services.AddMvc()
.AddJsonOptions(options => options.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver());
}
我做错了什么,我该怎么办?我真的不想使用代理
答案 0 :(得分:0)
通过DbContext连接到Db,始终返回null。
我认为这可能取决于您是否直接在服务类中创建数据库上下文。您可以/应该将DbContext
注入您的服务中。类似的东西:
public partial class GeneralService : IGeneralService, IDisposable
{
protected readonly AppDbContext Db;
public GeneralService(AppDbContext db)
{
Db = db;
}
// ... etc...
}
此外,由于您在Startup.cs
中为数据库提供了连接字符串,因此您不需要在数据库上下文中使用OnConfiguring
方法。
最后,如果他们使用EF,服务不应该是单身人士。请参阅推荐请求范围的this answer。