【问题标题】:One EF Core DbContext Multiple Application一个 EF Core DbContext 多应用程序
【发布时间】:2018-09-22 09:53:44
【问题描述】:

如何将一个 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());

    }

我做错了什么,我能做什么我真的不想使用代理

【问题讨论】:

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


    【解决方案1】:

    通过 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 的服务不应该是单例的。请参阅推荐 Request 范围的 this answer

    【讨论】:

    • 这将破坏 WCF 应用程序
    • 哪一部分?单例还是注入?
    猜你喜欢
    • 2021-11-23
    • 2012-11-02
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 2019-10-23
    • 1970-01-01
    • 2018-04-19
    相关资源
    最近更新 更多