一个EF Core DbContext多个应用程序

时间:2018-04-12 09:43:47

标签: asp.net-mvc wcf .net-core entity-framework-core ef-core-2.0

如何在多个应用程序中使用一个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());

    }

我做错了什么,我该怎么办?我真的不想使用代理

1 个答案:

答案 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