C# 我们如何在一个项目中添加实体框架,并在另一个项目中将其用作服务?

C# 我们如何在一个项目中添加实体框架,并在另一个项目中将其用作服务?,c#,entity-framework,microservices,C#,Entity Framework,Microservices,我希望一个项目有EntityFrameworkNuGet包,而其他项目只是在启动时用他们的模型名称注册这个服务。我见过这种方法的mongo版本,但我找不到任何ef版本。 mongo示例: 在役项目: using Autofac; using DShop.Common.Types; using Microsoft.Extensions.Configuration; using MongoDB.Driver; namespace DShop.Common.Mongo { public stati

我希望一个项目有EntityFrameworkNuGet包,而其他项目只是在启动时用他们的模型名称注册这个服务。我见过这种方法的mongo版本,但我找不到任何ef版本。 mongo示例: 在役项目:

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();
    }
}
使用Autofac;
使用DShop.Common.Types;
使用Microsoft.Extensions.Configuration;
使用MongoDB.Driver;
命名空间DShop.Common.Mongo
{
公共静态类扩展
{
公共静态void AddMongo(此ContainerBuilder生成器)
{
builder.Register(上下文=>
{
var配置=context.Resolve();
var options=configuration.GetOptions(“mongo”);
返回选项;
}).SingleInstance();
builder.Register(上下文=>
{
var options=context.Resolve();
返回新的MongoClient(options.ConnectionString);
}).SingleInstance();
builder.Register(上下文=>
{
var options=context.Resolve();
var client=context.Resolve();
返回client.GetDatabase(options.Database);
}).InstancePerLifetimeScope();
builder.RegisterType()
.As()
.InstancePerLifetimeScope();
builder.RegisterType()
.As()
.InstancePerLifetimeScope();
}
公共静态void AddMongoRepository(此ContainerBuilder生成器,字符串集合名称)
地点:可识别
=>builder.Register(ctx=>newmongorepository(ctx.Resolve(),collectionName))
.As()
.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();
var builder=newcontainerbuilder();
builder.RegisterAssemblyTypes(Assembly.GetEntryAssembly())
.a实现接口();
建造商。填充(服务);
builder.AddMongo();
建造商:AddMongoRepository(“Carts”);
建造商:AddMongoRepository(“客户”);
建造商:AddMongoRepository(“产品”);
Container=builder.Build();

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

  • 首先创建一个web应用程序
  • 创建类库项目,您可以在其中创建
    EntityFramework
    部分
  • 在此项目中安装Microsoft
    EntityFramework
  • 右键单击web项目上的
    Dependecies=>addreference
    ,然后选择EntityFramework项目
  • 在web项目中打开
    Startup.cs
    ,使用EntityFramework添加命名空间
    EntityFramework
    名称的类库的code>
  • 在同一文件中添加与数据库连接的代码

      services.AddDbContext<YourContext>(options => options
                            .UseSqlServer(Configuration
                            .GetConnectionString("DefaultConnectionString")));
    
    services.AddDbContext(选项=>options
    .UseSqlServer(配置
    .GetConnectionString(“DefaultConnectionString”);
    

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

    您好,谢谢您的回答,但我不希望在web项目中创建DbContext,并在启动和实体框架项目中传递模型,为每个项目自定义DbContext本身。