首页 > 解决方案 > 是否可以创建基础 EF DbContext 并在许多服务中使用它?

问题描述

我尝试在我的项目中实现微服务架构。我想知道我是否可以为依赖注入创建 1 种方法,以便在许多服务中实现 EntityFrameworkCore,所以我没有 DRY。

所以我在想的是我仍然创建我自己的 DbContext,而不是当我想注册它时,我只是把它放在我的 json 文件中,并services.UseSql()在我的startup.cs里面添加类似UseSql 使用文件中的配置的东西.json

我想说的是通用DbContext的。

我有一些例子,但正在使用 MongoDb :

例子

public static void AddMongo(this ContainerBuilder builder)
    {
        builder.Register(context =>
        {
            var configuration = context.Resolve<IConfiguration>();
            var options = configuration.GetOptions<MongoDbOptions>("mongo");

            return options;
        }).SingleInstance();

        builder.Register(context =>
        {
            var options = context.Resolve<MongoDbOptions>();

            return new MongoClient(options.ConnectionString);
        }).SingleInstance();

        builder.Register(context =>
        {
            var options = context.Resolve<MongoDbOptions>();
            var client = context.Resolve<MongoClient>();
            return client.GetDatabase(options.Database);

        }).InstancePerLifetimeScope();

        builder.RegisterType<MongoDbInitializer>()
            .As<IMongoDbInitializer>()
            .InstancePerLifetimeScope();

        builder.RegisterType<MongoDbSeeder>()
            .As<IMongoDbSeeder>()
            .InstancePerLifetimeScope();
    }

标签: c#.netentity-frameworkasp.net-coremicroservices

解决方案


如果我正确理解您的问题陈述,您希望多个微服务连接到同一个数据库。正如上面的评论所暗示的,你真的不应该这样做,因为你实际上是通过你的数据层耦合你的微服务——如果你的微服务发展成不兼容的数据层,这可能会很混乱。这将消除架构的许多好处,让您处理痛苦。因此,如果确实是这种情况,您可能需要考虑重新审视您的架构并尝试确定您是否需要一个新的微服务来处理这个公共数据存储并将其提供给其他人。

但实际上,有时您必须在项目之间共享代码,并且有一种官方方法可以做到这一点:将公共代码提取到 nuget 包中,将其托管在您的私有企业存储库中的某个位置(如果您愿意的话)并从您的其他项目中引用它。


推荐阅读