【问题标题】:How can we add entity framework in one project and use it as a service in another project?我们如何在一个项目中添加实体框架并在另一个项目中将其用作服务?
【发布时间】:2020-01-13 01:35:46
【问题描述】:

我希望一个项目具有实体框架 nuget 包,而其他项目只需在启动时使用其模型名称注册此服务。我见过这种方法的 mongo 版本,但我找不到任何 ef 版本。 蒙哥示例: 在服务项目中:

using Autofac;
using DShop.Common.Types;
using Microsoft.Extensions.Configuration;
using MongoDB.Driver;

namespace DShop.Common.Mongo
{
 public static class Extensions
    {
        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();
        }

        public static void AddMongoRepository<TEntity>(this ContainerBuilder builder, string collectionName)
            where TEntity : IIdentifiable
            => builder.Register(ctx => new MongoRepository<TEntity>(ctx.Resolve<IMongoDatabase>(), collectionName))
                .As<IMongoRepository<TEntity>>()
                .InstancePerLifetimeScope();
    }
}

在 web 项目的启动中:

 var builder = new ContainerBuilder();
            builder.RegisterAssemblyTypes(Assembly.GetEntryAssembly())
                .AsImplementedInterfaces();
            builder.Populate(services);  
            builder.AddMongo();
            builder.AddMongoRepository<Cart>("Carts");
            builder.AddMongoRepository<Customer>("Customers");
            builder.AddMongoRepository<Product>("Products");

            Container = builder.Build();

【问题讨论】:

    标签: c# entity-framework microservices


    【解决方案1】:

    如果您正在创建 Web 应用程序、测试项目、DAL 项目等,通常的解决方案有多个项目,例如 Web 项目。我创建了一个示例,向您展示如何在同一解决方案中连接项目。

    1. 首先创建一个 Web 应用程序
    2. 创建类库项目,您可以在其中创建EntityFramework 部分

    1. 在此项目中安装 Microsoft EntityFramework

    1. 在 web 项目上右键单击 Dependecies =&gt; Add Reference 并选择 EntityFramework 项目。

    1. 在 Web 项目中打开 Startup.cs,添加名称为 EntityFramework 的类库的命名空间 using EntityFramework;
    2. 在同一个文件中添加连接数据库的代码。

        services.AddDbContext<YourContext>(options => options
                              .UseSqlServer(Configuration
                              .GetConnectionString("DefaultConnectionString")));
      

    您可以使用相同的方式连接多个项目。

    【讨论】:

    • 您好,感谢您的回答,但我不想在 Web 项目中创建 DbContext 并在启动和实体框架工作项目中传递模型,从而为每个项目制作自定义 DbContext。
    猜你喜欢
    • 2019-07-25
    • 2015-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-02
    • 1970-01-01
    • 1970-01-01
    • 2022-11-20
    相关资源
    最近更新 更多